разбор большого xml-файла с помощью Python-etree.ошибка

попытка проанализировать следующий файл Python с помощью lxml.etree.функции методом iterparse, показанный.

" sampleoutput.XML-код"

<item>
  <title>Item 1</title>
  <desc>Description 1</desc>
</item>
<item>
  <title>Item 2</title>
  <desc>Description 2</desc>
</item>

я попробовал код разбор большого XML-файла с Python lxml и Iterparse

перед etree.методом iterparse, показанный(файл myfile) звонок я сделал файл myfile = открыть("/пользователи/Эрик/рабочий стол/wikipedia_map/sampleoutput.xml", "r")

но появляется следующая ошибка

Traceback (most recent call last):
  File "/Users/eric/Documents/Programming/Eclipse_Workspace/wikipedia_mapper/testscraper.py", line 6, in <module>
    for event, elem in context :
  File "iterparse.pxi", line 491, in lxml.etree.iterparse.__next__ (src/lxml/lxml.etree.c:98565)
  File "iterparse.pxi", line 543, in lxml.etree.iterparse._read_more_events (src/lxml/lxml.etree.c:99086)
  File "parser.pxi", line 590, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:74712)
lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 5, column 1

какие идеи? спасибо!

2 ответов


проблема в том, что XML плохо сформирован, если у него нет точно одного тега верхнего уровня. Вы можете исправить свой образец, обернув весь документ в <items></items> теги. Вам также нужно <desc/> теги, соответствующие запросу, который вы используете (description).

следующий документ дает правильные результаты с вашим существующим кодом:

<items>
  <item>
    <title>Item 1</title>
    <description>Description 1</description>
  </item>
  <item>
    <title>Item 2</title>
    <description>Description 2</description>
  </item>
</items>

насколько я знаю, xml.etree.ElementTree обычно ожидает, что XML-файл будет содержать один "корневой" элемент, т. е. один XML-тег, который заключает в себе всю структуру документа. Из сообщения об ошибке, которое вы опубликовали, я бы предположил, что это проблема и здесь:

строка 5 относится ко второму <item> тег, поэтому я думаю, что Python жалуется, что после предполагаемого корневого элемента (т. е. первого <item> tag) был закрыт.