xml.etree.ElementTree.ParseError:格式不正确

时间:2017-08-13 17:18:14

标签: python xml

我有以下代码:

from xml.etree import ElementTree

file_path = 'some_file_path'

document = ElementTree.parse(file_path, ElementTree.XMLParser(encoding='utf-8'))

如果我的XML看起来如下,则它会给我错误:“xml.etree.ElementTree.ParseError:not wellform”

<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page id="1">
<textbox id="0">
<textline bbox="53.999,778.980,130.925,789.888">
<text font="GCCBBY+TT228t00" bbox="60.598,778.980,64.594,789.888" size="10.908">H</text>
<text font="GCCBBY+TT228t00" bbox="64.558,778.980,70.558,789.888" size="10.908">-</text>
<text>
</text>
</textline>
</textbox>
</page>
</pages>

在sublime或Notepad ++中,我看到突出显示的字符,如ACK,DC4或STX,它们似乎是罪魁祸首(其中一个字符在第二个“text”节点的上述xml中显示为“ - ”)。如果我删除这些字符就可以了。这些是什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

按如下方式运行代码,它运行正常:

from xml.etree import ElementTree
from StringIO import StringIO 


xml_content = """<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page id="1">
<textbox id="0">
<textline bbox="53.999,778.980,130.925,789.888">
<text font="GCCBBY+TT228t00" bbox="60.598,778.980,64.594,789.888" size="10.908">H</text>
<text font="GCCBBY+TT228t00" bbox="64.558,778.980,70.558,789.888" size="10.908">-</text>
<text>
</text>
</textline>
</textbox>
</page>
</pages>"""

print("parsing xml document")
# using StringIO to simulate reading from file  
document = ElementTree.parse(StringIO(xml_content), ElementTree.XMLParser(encoding='utf-8')) 

for elem in document.iter():
  print(elem.tag) 

输出符合预期:

parsing xml document
pages
page
textbox
textline
text
text
text

所以,问题是如何从记事本++复制和粘贴文件,也许它会添加一些特殊字符,所以请尝试使用其他编辑器。