【发布时间】:2016-06-26 10:23:30
【问题描述】:
我正在尝试使用 dblp 数据集将 xml 文件转换为 csv 文件。现在,我正在使用 iterparse() 来解析 xml 文件。
这是我的代码:
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。否则会报告:
lxml.etree.XMLSyntaxError: Entity 'ouml' not defined, line 47, column 25
'ouml'、'uuml' 等实体出现在 xml 文件中,并在 dtd 文件中定义。虽然将 dtd_validation 设置为 false 可以防止 No declaration 错误,但是会发生这种错误。
【问题讨论】:
-
你真的需要做 dtd 验证吗?如果不是,那为什么要设置
dtd_validation=True? -
@har07 我忘了说,我想我确实需要 dtd_validation,因为 dtd 文件在 xml 文件中定义了一些实体。没有dtd文件,会报如下错误:lxml.etree.XMLSyntaxError: Entity 'ouml' not defined, line 47, column 25
标签: python xml python-2.7 lxml