2016-05-19 8 views
0

Ich versuche, folgende XML-Datei mit lxml.etree.parse() zu analysieren. Dieses XML enthält ein Zeichen aus einer speziellen Schriftart in Zeile 3. Dieses Zeichen ist Dingbats Schriftart - Wert 0x 7 - ein Telefon Piktogramm. In Notepad ++ wird es als BEL angezeigt - weiße Buchstaben in einem schwarzen Rechteck. Ich war nicht in der Lage, diesen Charakter in die Frage einzubeziehen.Lxml stürzt beim Parsen von Zeichen aus der speziellen Schriftart ab

<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'> 
     <layer pass="0" class="FontMarker" locked="0"> 
     <prop k="chr" v="!!!SPECIAL_CARACTER_HERE!!!"/> 
     </layer> 
</qgis> 

Dieser Charakter macht lxml (xml stürzt auch) Absturz mit dem folgenden Fehler:

File "lxml.etree.pyx", line 3193, in lxml.etree.parse (src/lxml/lxml.etree.c:64168) 
    File "parser.pxi", line 1548, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:91390) 
    File "parser.pxi", line 1577, in lxml.etree._parseDocumentFromURL (src/lxml/lxml.etree.c:91674) 
    File "parser.pxi", line 1477, in lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:90741) 
    File "parser.pxi", line 1024, in lxml.etree._BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:87655) 
    File "parser.pxi", line 565, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:83243) 
    File "parser.pxi", line 656, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:84225) 
    File "parser.pxi", line 596, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:83549) 
lxml.etree.XMLSyntaxError: invalid character in attribute value, line 3, column 14 

Wie kann ich ein Dokument wie folgt analysieren?

UPDATE: A link to the file itself.

+0

Haben Sie diesen Charakter brauchen oder ist es in Ordnung, es zu abzustreifen? – pacholik

+0

@pacholik Ich brauche es, aber es ist besser, den größten Teil der Datei als gar nichts zu parsen, so dass die Umgehung mit Ausschluss solcher Zeichen etwas befriedigend sein wird. –

+1

Es zeigt als BEL wie 7 das Steuerzeichen BEL darstellt https://en.wikipedia.org/wiki/Bell_character, haben Sie einen Link zu der Schriftart und/oder XML-Datei? –

Antwort

0

Es scheint, dass lxml nicht mithalten können. Sie können jedoch recover verwenden, um mit Fehlern umzugehen.

recover - try hard to parse through broken XML

>>> from lxml import etree 
>>> parser = etree.XMLParser(recover=True) 
>>> tree = etree.parse("/tmp/qgis.xml", parser=parser) 
>>> tree.find("layer/prop").attrib 
{'v': '', 'k': 'chr'}