2016-05-19 20 views
0

lxml.etree.parse()を使用して以下のXMLファイルを解析しようとしています。このXMLには、3行目の特殊フォントの文字が含まれています。この文字は、Dingbatsのfont-value 0x 7-電話の絵文字です。メモ帳++では、BEL - 黒い四角内に白い文字が表示されます。私は質問にこのcaracterを投入することができませんでした。特殊フォントの文字を解析するときにlxmlがクラッシュする

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 

どのように私はこのような文書を解析することができます

<!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> 

この文字は、lxmlの(だけでなく、XMLのクラッシュ)、次のエラーでクラッシュするのですか?

UPDATE: A link to the file itself.

+0

それを取り除くために、あなたがその文字を必要とするか、それは大丈夫ですか? – pacholik

+0

@pacholik私はそれを必要としますが、ファイルの大部分を何も解析しない方が良いです。そのような文字を除外して回避することはいくぶん満足です。 –

+1

BELとして表示されます。7はBEL https://en.wikipedia.org/wiki/Bell_characterを表す制御文字です。フォントやXMLファイルへのリンクはありますか? –

答えて

0

lxmlのはそれと競合することはできませんということらしいです。あなたはエラーに対処するために、recoverを使用することができます。

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'} 
関連する問題