11

lxml.etree.iterparse関数を使用して次のPythonファイルを解析しようとしています。

「sampleoutput.xml」

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

PythonlxmlとIterparseを使用して大きなXMLファイルを解析するコードを試しました

etree.iterparse(MYFILE)を呼び出す前に、MYFILE = open( "/ Users / eric / Desktop / 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

何か案は?ありがとう!

4

2 に答える 2

14

問題は、トップレベルのタグが1つだけない場合、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>
于 2012-07-09T05:01:29.993 に答える
5

私の知る限り、xml.etree.ElementTreeは通常、XMLファイルに1つの「ルート」要素、つまり完全なドキュメント構造を囲む1つのXMLタグが含まれていることを想定しています。あなたが投稿したエラーメッセージから、これもここでの問題であると思います。

「5行目」は2番目のタグを参照しているため、Pythonは、想定されるルート要素(つまり最初のタグ)が閉じられた<item>後、さらに多くのデータが続くと文句を言っていると思います。<item>

于 2012-07-09T04:39:49.620 に答える