我想使用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