Как исправить XMLSyntaxError: преждевременное завершение данных в теге <Some Xml Tag "> - PullRequest
1 голос
/ 18 марта 2019

Итак, я видел некоторые ответы, но ни один из них, похоже, не решил эту проблему. Я пытаюсь разобрать простой файл, используя метод lxml.etree.parse, но получаю сообщение об ошибке

lxml.etree.XMLSyntaxError: преждевременное завершение данных в теге тело строка 2, строка 2, столбец 32

Я получаю сообщение об ошибке:

tree = etree.parse( infile, parser )

Вот простой xml-файл, который хорошо сформирован:

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Dont forget me this weekend</body>
</note>

Вот моя реализация, основная функция (parseXmlFile), которая анализирует XML-файл

from lxml import etree
from path import path
from FixNS import FixNS
....

def parseXmlFile(xmlFilePath):
    nsPrefixMap = dict()
    fixns = FixNS()
    fixns.fixNS( xmlFilePath )
    infile = fixns.getResult()
    fixns.getNSPrefixMap( nsPrefixMap )

    parser = etree.XMLParser( remove_blank_text = True, ns_clean = True, huge_tree = True )
    tree = etree.parse( infile, parser )
    root = tree.getroot()
    return tree, root, nsPrefixMap, fixns

FixNS класс плюс вспомогательные функции - добавлено для полноты:

from cStringIO import StringIO
import xml.sax.expatreader
from xml.sax import make_parser, SAXNotRecognizedException, SAXNotSupportedException
from xml.sax.handler import property_lexical_handler, feature_namespaces, feature_validation
from xml.sax.saxutils import XMLGenerator, quoteattr
from blzip import ReadBLZip

class FixNS(XMLGenerator):

    def __init__(self):
        XMLGenerator.__init__(self)

    def fixNS(self, infilename):
        XMLGenerator.__init__(self, StringIO())
        self._out = StringIO()
        self._result = StringIO()
        self._inFileName = infilename
        self._nsDeclPos = 0
        self._wasBLZipped = False
        self._inContent = file(self._inFileName, 'rb').read()
        if self._inContent.startswith('BLZIP'):
            self._inContent = ReadBLZip(self._inFileName)
            self._wasBLZipped = True
        self._knownNsPrefixes = set()
        self._collectedNsPrefixes = dict()
        self._isroot = True
        self._in_entity = 0
        self._in_cdata = 0
        self._line = 0
        self._column = 0
        self._parser = make_parser(['xml.sax.expatreader'])
        self._parser.setContentHandler(self)
        self._parser.setProperty(property_lexical_handler, self)
        try:
            self._parser.setFeature(feature_namespaces, 0)
        except (SAXNotRecognizedException, SAXNotSupportedException):
            pass

        try:
            self._parser.setFeature(feature_validation, 0)
        except (SAXNotRecognizedException, SAXNotSupportedException):
            pass

        self._parser.parse(StringIO(self._inContent))

    def getResult(self):
        return StringIO(self._result.getvalue())

Я использую Python 2.7 и lxml-2.3 . Любая помощь о том, как исправить эту ошибку синтаксического анализа?

...