ParseError: не правильно сформирован (неверный токен) с использованием ElementTree - PullRequest
1 голос
/ 06 июля 2019

У меня есть редкая проблема, которую я, кажется, не могу обернуть, это связано с анализом XML с использованием ElementTree в python.

Пробовал поиск подсказок и ответов о похожих проблемах, но безрезультатно

Моя функция:

def errorChecker(xmlResponse):
    xmlResponse = str(xmlResponse)
    xmlText = xmlParser.fromstring(xmlResponse)
    errorText = ""
    for xmlData in xmlText.iter():  
            print xmlData.tag
            if xmlData.tag == "fault":
                for errorData in xmlText.iter('code'):
                    #errorText = errorDict[errorData]
                    return errorData.text
    return False

Когда я передаю этот XML-код, он возвращается очень хорошо:

"""<?xml version="1.0" encoding="utf-8"?>
<response>
  <fault>
    <code>1055</code>
  </fault>
</response>"""

Но когда я получаю XML напрямую с сервера и передаю его функции, я получаю эту ошибку:

Traceback (most recent call last):
  File "wmsTest.py", line 556, in <module>
    errorChecker(str(location))
  File "wmsTest.py", line 134, in errorChecker
    xmlText = xmlParser.fromstring(str(xmlResponse))
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1311, in XML
    parser.feed(text)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1659, in feed
    self._raiseerror(v)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1523, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 6, column 11

Добавлена ​​информация о моем запросе к серверу:

Я использую запросы для доступа к серверу.Используя:

response = requests.post(appServer, data=xml)
print "raw from server"
print response.text
print "str response"
print str(response.text)
return response.text

ответ:

    raw from server
<?xml version="1.0" encoding="utf-8"?>
<response>
  <fault>
    <code>1055</code>
  </fault>
</response>
str response
<?xml version="1.0" encoding="utf-8"?>
<response>
  <fault>
    <code>1055</code>
  </fault>
</response>

Python интерпретирует входящий XML как тип Unicode, он в точности совпадает с приведенным выше ручным XML-кодом, так как это печать.Я только добавляю "" "для начала и конца.

Есть какие-нибудь подсказки?

1 Ответ

1 голос
/ 07 июля 2019

После того, как я проверил некоторые длины, которые были возвращены, я выяснил, что серверы возвращают более длинный ответ, чем ожидалось, после этого к концу добавляется пробел. Удаление пробела очистило проблему!

...