【问题标题】:cElementTree.ParseError: not well-formed (invalid token)cElementTree.ParseError:格式不正确(无效标记)
【发布时间】:2017-07-28 13:46:34
【问题描述】:

我有一个大型 XML 文件(包含 200 万个对象的详细信息),其内容类似于如下所示。文件大小为 657MB

<?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

此错误在不同位置不断重复。如何避免此类错误。任何帮助将不胜感激。

【问题讨论】:

  • 那条线上的那个位置是什么?
  • 一些文字描述,但其中包含 xA0 种错误
  • 如果值为\xA0,则您的文件未正确编码为utf-8。
  • 如何解决这个问题
  • 我会尝试的第一件事是将 XML 声明更改为 &lt;?xml version="1.0" encoding="latin=1" ?&gt; 并看看会发生什么。

标签: python python-2.7 xml-parsing


【解决方案1】:

(发布为以后读者的答案)

如果错误的令牌值为 \xA0,则该文件未正确编码为 utf-8。
如果文件只有 8 位字符,则需要将 XML 声明更改为其他内容,可能是&lt;?xml version="1.0" encoding="iso-8859-1" ?&gt;

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2016-05-04
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多