2017-10-06 7 views
1

私は職場でPythonを学んでいます。私はデータを収集して動作し、私のPython本の一つのうち、XMLパーサをコピーしたPython XML Parser:文書要素の後の迷惑メール

<r><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c></c><c></c><c>something1</c><c>something1</c></r> 
<r><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c></c><c></c><c>something2</c><c>something2</c></r> 

testData3.xmlファイル:私はこれと同様のデータを持つ大規模なXMLファイルを持っていますデータファイルに1行しか含まれていない場合2行目のデータを追加するとすぐに、スクリプトは実行時に失敗します。私が実行している

Pythonスクリプト(xmlReader.py):

from xml.dom.minidom import parse, Node 
    xmltree = parse('testData3.xml') 
    for node1 in xmltree.getElementsByTagName('c'): 
     for node2 in node1.childNodes: 
      if node2.nodeType == Node.TEXT_NODE: 
       print(node2.data) 

私xmlReader.pyの代わりに、ファイル全体を通じて続けるように私はループを記述する方法についていくつかの助けを探していますただ1行。実行時に

エラー:私はこのスクリプトを実行すると、私は次のエラーを取得

[email protected]:~/xxxx/xxxx> python xmlReader.py 
Traceback (most recent call last): 
    File "xmlReader.py", line 2, in <module> 
    xmltree = parse('testData3.xml') 
    File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1915, in parse 
    return expatbuilder.parse(file) 
    File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 926, in parse 
    result = builder.parseFile(fp) 
    File "/usr/lib64/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 207, in parseFile 
    parser.Parse(buffer, 0) 
xml.parsers.expat.ExpatError: junk after document element: line 2, column 0 
[email protected]:~/xxxx/xxxx> 

答えて

1

問題はあなたの例のデータが有効なXMLではないということです。有効なXML文書には1つのルート要素が必要です。ファイルの1行では<r>がルート要素ですが、2行目を追加すると真ではありません。各行は個別の<r>要素に含まれていますが、ファイルにはグローバル親要素は存在しません。

どちらか例えば、有効なXMLを構築:

<root> 
    <r><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c>something1</c><c></c><c></c><c>something1</c><c>something1</c></r> 
    <r><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c>something2</c><c></c><c></c><c>something2</c><c>something2</c></r> 
</root> 

または行毎にファイルを解析する:

from xml.dom.minidom import parseString 
f = open('testData3.xml'): 
    for line in f: 
     xmltree = parseString(line) 
     ... 
f.close() 
関連する問題