我想使用dblp数据集将xml文件转换为csv文件。现在,我正在使用iterparse()来解析xml文件。lxml.etree.XMLSyntaxError:没有属性声明
这里是我的代码:
def iterpar():
f = open(dblp.xml', 'rb')
context = etree.iterparse(f, dtd_validation=True, events=("start", "end"))
context = iter(context)
event, root = next(context)
for event, ele in context:
print event
print ele
然而,当我试图打印出来的东西,看看它是什么,报告了错误:
Traceback (most recent call last):
File "C:\dblp\Data\XML2csv", line 34, in <module>
iterpar()
File "C:\dblp\Data\XML2csv", line 29, in iterpar
for event, ele in context:
File "iterparse.pxi", line 208, in lxml.etree.iterparse.__next__ (src\lxml\lxml.etree.c:131498)
lxml.etree.XMLSyntaxError: No declaration for attribute mdate of element article, line 4, column 19
我想这可能会导致从由于所有属性都在dtd文件中声明,因此无法验证dtd验证。我也试图谷歌,如果有任何解释我的问题,但没有找到一个好的。
任何人都可以解释它并告诉我如何解决它?非常感谢你。
----------- ---------更新
我觉得我确实需要dtd_validation。否则,它会报告:发生在XML文件
lxml.etree.XMLSyntaxError: Entity 'ouml' not defined, line 47, column 25
实体,如“ouml”,“uuml”,并在DTD文件中定义。尽管将dtd_validation设置为false可防止出现No声明错误,但会发生此错误。
你真的需要做dtd验证吗?如果没有,那么为什么设置'dtd_validation = True'? – har07
@ har07 \t 我忘记说了,我想我需要dtd_validation,因为dtd文件在xml文件中定义了一些实体。如果没有dtd文件,它将报告以下错误:lxml.etree.XMLSyntaxError:实体'ouml'未定义,第47行,第25列 – Wulipapa