2017-08-13 86 views
-1

我有以下代碼: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。 –

回答

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 

所以,問題是你如何複製和粘貼文件記事本++,也許它是添加一些特殊字符,所以嘗試與另一個編輯器。

相關問題