2017-03-08 7 views
0

次のような内容の大きなXMLファイル(200万個のオブジェクトの詳細)があります。ファイルサイズは657MBですcElementTree.ParseError:整形式でない(無効なトークン)

<?xml version="1.0" encoding="UTF-8?> 
<root> 
    <item> 
     <rank>1</rank> 
     <landinglink>www.google.com</landinglink> 
     <descrip>some text</descrip> 
    </item> 
    <item> 
     <rank>1</rank> 
     <landinglink>www.facebook.com</landinglink> 
     <descrip>some text</descrip> 
    </item> 
    <item> 
     <rank>1</rank> 
     <landinglink>www.xyz.com</landinglink> 
     <descrip>some text</descrip> 
    </item> 
    . 
    . 
    . 
    . 
    . 
    . 
    . 
</root> 

私はすべての「着陸リンク」を印刷しようとしています。私が使用しているコードは以下の通りです。

import xml.etree.cElementTree as ET 
for event, elem in ET.iterparse("filename.xml"): 
    if event == 'end' and elem.tag == 'item': 
     print elem.find('landinglink').text 

しかし、コードを実行しているうちに次のエラーが表示されます。

Traceback (most recent call last): 
    File "D:/test.py", line 2, in <module> 
    for event, elem in ET.iterparse("filename.xml"): 
    File "<string>", line 91, in next 
cElementTree.ParseError: not well-formed (invalid token): line 1338, column 298 

このエラーは、別の場所で繰り返されます。このタイプのエラーを回避する方法。どんな助力も高く評価されます。

+0

その行には、その位置に何がありますか? – cco

+0

いくつかのテキストの説明がありますが、xA0種類のエラーが含まれています –

+0

値が '\ xA0'の場合、ファイルはutf-8として正しくエンコードされません。 – cco

答えて

1

(後で読者のための答えとして転記)

悪いトークン値が\xA0ある場合、ファイルが正しくUTF-8で符号化されません。
ファイルに8ビット文字しかない場合は、XML宣言を別のもの(おそらく<?xml version="1.0" encoding="iso-8859-1" ?>)に変更する必要があります。

関連する問題