首页 > 解决方案 > Python Post 请求响应 Xml 错误加载 fromstring

问题描述

我确实是 Python 的新手,我遇到了一些我不确定如何解决的问题 我确定它一定是一个简单的修复,但还没有找到解决方案,希望有更多 Python 知识的人能够提供帮助. 我的请求:

...
contacts = requests.post(url,data=readContactsXml,headers=headers); 

#print (contacts.content) ;
outF = open("contact.xml", "wb")
outF.write(contacts.content)
outF.close();

一切都很好,直到我必须在保存数据之前对其进行操作:

例如:

...
contacts = requests.post(url,data=readContactsXml,headers=headers);


import xml.etree.ElementTree as ET

# contacts.encoding = 'utf-8'
parser = ET.XMLParser(encoding="UTF-8")
tree = ET.fromstring(contacts.content, parser=parser)
root = tree.getroot()
for item in root[0][0].findall('.//fields'):
    if item[0].text == 'maching-text-here':
         if not item[1].text:
              item[1].text = 'N/A'
              print(item[1].text)

#print (contacts.content) ;
outF = open("contact.xml", "wb")
outF.write(contacts.content)
outF.close();

在上面我从字面上用值'N/A'替换空值

我收到的错误是:

Traceback (most recent call last):
  File "Desktop/PythonTests/test.py", line 107, in <module>
    tree = ET.fromstring(contacts.content, parser=parser)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1311, in XML
    parser.feed(text)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1659, in feed
    self._raiseerror(v)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1523, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 192300

环顾这个专栏,我可以看到一个带有字符 EG: 的文本SinédÉ这是一个问题,实际上,当我保存这个 xml 文件并在浏览器中打开时,我得到了一种相同的错误,关于给或取同一列缺少 2:

This page contains the following errors:
error on line 1 at column 192298: Encoding error
Below is a rendering of the page up to the first error.

我想知道如何处理包含字符数据的数据 xml 响应?

任何人的任何帮助表示赞赏!

标签: pythonxmlxml-parsing

解决方案


挖掘堆栈溢出后找到我的答案:

我已经修改:

从: tree = ET.fromstring(contacts.content, parser=parser)

至: tree = ElementTree(fromstring(contacts.content))

参考:https://stackoverflow.com/questions/33962620/elementtree-returns-element-instead-of-elementtree/44483259#44483259


推荐阅读