Я пытаюсь использовать набор данных 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
Я предполагаю, что это может быть результатом fail dtd validation, потому что все атрибуты объявлены в файле dtd. Я также пытался Google, если есть какие-либо объяснения моей проблемы, но не нашел хорошего.
Может кто-нибудь объяснить это и сказать мне, как это исправить? Большое спасибо.
----------- обновление ---------
Я думаю, что мне нужно dtd_validation. В противном случае он сообщит:
lxml.etree.XMLSyntaxError: Entity 'ouml' not defined, line 47, column 25
Сущности как «ouml», «» uuml происходит в XML-файле, и определяется в файле DTD. Хотя установка dtd_validation как ложная, предотвращает ошибку объявления объявления, но это произойдет.
Нужно ли вам выполнять валидацию dtd? Если нет, то зачем устанавливать 'dtd_validation = True'? – har07
@ har07 \t Я забыл сказать, я думаю, что мне нужно dtd_validation, потому что файл dtd определяет некоторые объекты в XML-файле. Без файла dtd он сообщит следующую ошибку: lxml.etree.XMLSyntaxError: Entity 'ouml' не определен, строка 47, столбец 25 – Wulipapa