xml.parsers.expat.ExpatError при разборе XML - PullRequest
6 голосов
/ 17 июля 2009

Я пытаюсь разобрать XML с Python, но не очень далеко. Я думаю, что из-за неправильного дерева XML этот API возвращает.

Итак, вот что возвращает запрос 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 ]

13 голосов
/ 17 июля 2009

Основная проблема заключается в том, что код 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, чтобы получить значение.

4 голосов
/ 17 июля 2009

XML-документ состоит из одного элемента документа верхнего уровня, а затем нескольких подэлементов. Ваш фрагмент XML содержит несколько элементов верхнего уровня, что запрещено стандартом XML.

Попробуйте вернуть что-то вроде:

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

Я завернул весь ответ в тег <result>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...