解析XML时出现xml.parsers.expat.ExpatError

时间:2009-07-16 22:30:29

标签: python xml

我正在尝试用Python解析XML,但没有走得太远。我认为这是由于这个API返回错误的XML树。

这就是GET请求返回的内容:

<codigo>3</codigo><valor></valor><operador>Dummy</operador>

GET请求在这里:

http://69.36.9.147:8090/clientes/SMS_API_OUT.jsp?codigo=ABCDEFGH&cliente=XX

这是我正在使用的Python代码,没有任何运气:

import urllib
from xml.dom import minidom

url = urllib.urlopen('http://69.36.9.147:8090/clientes/SMS_API_OUT.jsp?codigo=ABCDEFGH&cliente=XX')
xml = minidom.parse(url)
code = doc.getElementsByTagName('codigo')

print code[0].data

这是我得到的回应:

xml.parsers.expat.ExpatError: junk after document element: line 1, column 18

我需要做的是检索<codigo>元素中的值并将其放在变量中(与其他元素相同)。

2 个答案:

答案 0 :(得分:13)

这里的主要问题是该服务返回的XML代码不包含无效的根节点。我通过简单地将输出包装在<root>节点中来解决这个问题。

import urllib
from xml.etree import ElementTree

url = 'http://69.36.9.147:8090/clientes/SMS_API_OUT.jsp?codigo=ABCDEFGH&cliente=XX'
xmldata = '<root>' + urllib.urlopen(url).read() + '</root>'
tree = ElementTree.fromstring(xmldata)
codigo = tree.find('codigo').text

print codigo

你可以使用你想要的任何解析器,但在这里我使用ElementTree来获取值。

答案 1 :(得分:4)

XML文档由一个顶级文档元素组成,然后是多个子元素。您的XML片段包含多个顶级元素,XML标准不允许这样做。

尝试返回类似的内容:

<result><codigo>3</codigo><valor></valor><operador>Dummy</operador></result>

我已将整个回复包装在<result>标记中。