xml.etree.ElementTree.ParseError:没有很好地形成

问题描述:

我有以下代码:xml.etree.ElementTree.ParseError:没有很好地形成

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:没有很好地形成”

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

在升华或记事本++我看到高亮字符,例如ACK,DC4,或STX这似乎是罪魁祸首(它们中的一个显示为‘ - ’在上面的XML在第二个“文本”节点)。如果我删除这些字符,它的作品。这些是什么,我该如何解决这个问题?

+0

如果您的XML格式不正确,那么您没有有效的XML文档。修复你的输入。 –

+0

你是什么意思XML不是良构? xml由pdfMiner lib生成。我的代码可以解析大多数生成的xml文件,除了那些包含问题中提到的字符的文件。我试图找出如何处理这些角色,他们到底是什么? – dmornad

+1

那么,你似乎在数据中有无效的字节;我会说这不是有效的UTF-8。如果pdfMiner正在产生这个,你需要问为什么pdfMiner产生无效的XML。 –

运行你的代码如下,它的正常工作:

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 

所以,问题是你如何复制和粘贴文件记事本++,也许它是添加一些特殊字符,所以尝试与另一个编辑器。