python-xml.etree.ElementTree.ParseError:格式不正确(令牌无效)

时间:2018-08-08 15:38:26

标签: python xml python-3.x xml-parsing elementtree

我有以下代码:

import xml.etree.ElementTree as ETree

parser = ETree.XMLParser(encoding="utf-8")
tree = ETree.fromstring("C:/Users/XXX/Downloads/test_xml.xml", parser=parser)
print(ETree.tostring(tree))

我收到以下错误消息:

Traceback (most recent call last):
  File "C:/Users/XXX/.PyCharmCE2018.1/config/scratches/scratch.py", line 6, in <module>
    tree = ETree.fromstring("C:/Users/XXX/Downloads/test_xml.xml", parser=parser)
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1314, in XML
    parser.feed(text)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 2

我检查了关于StackOverflow上此错误消息的所有问题,没有任何帮助:

  • 我尝试使用其他编辑器来编辑文件(根据here的建议);
  • 我添加了以下这一行:tree.set('SignalStrength',"100")(来自here);
  • 试图添加DOCTYPE;
  • 使用W3 Validator检查了文件;

然后,我尝试导入具有完全另一种结构的另一个XML文件-并且错误消息仍然相同-甚至位置:line 1, column 2

然后我尝试将文件名更改为不存在-错误消息仍然相同!因此,这不是文件问题,而是其他问题。而且我不明白什么。

PS 。这是我使用的XML文件之一:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

编辑: 可能我无法像在fromstring()函数中那样导入文件?

1 个答案:

答案 0 :(得分:1)

从文件进行解析时,您需要使用parse()而不是fromstring()

parse()返回一个ElementTree实例,tostring()期望一个Element实例。

此代码有效:

import xml.etree.ElementTree as ETree

parser = ETree.XMLParser(encoding="utf-8")
tree = ETree.parse("test_xml.xml", parser=parser)
print(ETree.tostring(tree.getroot()))