我需要解析一个编码为“ISO-8859-1”的 1.2GB XML 文件,在阅读了 NET 上的几篇文章后,似乎 Python 的 ElementTree 的 iterparse() 比 SAX 解析更受青睐。
我写了一段非常短的代码只是为了测试它,但它提示了一个我不知道如何解决的错误。
我的代码(Python 2.7):
from xml.etree.ElementTree import iterparse
for (event, node) in iterparse('dblp.xml', events=['start']):
print node.tag
node.clear()
Edit:啊,由于文件确实很大而且很慢,所以我输入了 XML 行,然后犯了一个错误。是“ü”没有空间。我对此表示歉意。
这段代码工作正常,直到它到达 XML 文件中如下所示的一行:
<Journal>Technical Report 248, ETH Zürich, Dept of Computer Science</Journal>
我猜这意味着苏黎世,但解析器似乎不知道这一点。
运行上面的代码给我一个错误:
xml.etree.ElementTree.ParseError: undefined entity ü
无论如何我可以解决这个问题吗?我在谷歌上搜索了很多解决方案,但似乎没有一个能直接解决这个问题。
尝试以下操作:
from xml.etree.ElementTree import iterparse, XMLParser
import htmlentitydefs
class CustomEntity:
def __getitem__(self, key):
if key == 'umml':
key = 'uuml' # Fix invalid entity
return unichr(htmlentitydefs.name2codepoint[key])
parser = XMLParser()
parser.parser.UseForeignDTD(True)
parser.entity = CustomEntity()
for (event, node) in iterparse('dblp.xml', events=['start'], parser=parser):
print node.tag
node.clear()
OR
from xml.etree.ElementTree import iterparse, XMLParser
import htmlentitydefs
parser = XMLParser()
parser.parser.UseForeignDTD(True)
parser.entity = {'umml': unichr(htmlentitydefs.name2codepoint['uuml'])}
for (event, node) in iterparse('dblp.xml', events=['start'], parser=parser):
print node.tag
node.clear()
相关问题:Python ElementTree 支持解析未知的 XML 实体吗? https://stackoverflow.com/questions/7237466/python-elementtree-support-for-parsing-unknown-xml-entities
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)