gpt4 book ai didi

python - ElementTree的iterparse() XML解析错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:51 25 4
gpt4 key购买 nike

我需要解析一个编码为“ISO-8859-1”的1.2GB XML文件,在阅读了网上的一些文章后,似乎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()

编辑: 啊,由于文件真的很大而且很慢,我输入了 XML 行,然后犯了一个错误。是“ü”没有空间。对此我深表歉意。

这段代码工作正常,直到它到达 XML 文件中如下所示的一行:

<Journal>Technical Report 248, ETH Z&uuml;rich, Dept of Computer Science</Journal>

我猜这意味着苏黎世,但解析器似乎不知道这一点。

运行上面的代码出现错误:

xml.etree.ElementTree.ParseError: undefined entity &uuml;

有什么办法可以解决这个问题吗?我在谷歌上搜索了很多解决方案,但似乎没有一个能直接解决这个问题。

最佳答案

尝试以下操作:

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()

或者

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 support for parsing unknown XML entities?

关于python - ElementTree的iterparse() XML解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com