我正在使用python-suds开发SOAP api。
Api返回结果,suds根据WSDL解析它。结果数据具有XML数据字段
(MyServiceResult){
errorMsg = "Error Message here..."
sessionId = "..."
outputDataXML = "<![CDATA[<Results>.....<Details>....</Details></Results>]]>"
errorCode = "00"
}
所以我打算使用xml.etree.ElementTree
来解析xml数据部分outputDataXML
。但由于返回的数据以<![CDATA[
开头,因此xml解析器失败并带有
ParseError:语法错误:第1行,第0列
除了使用正则表达式之外,这种情况的最佳方法是什么?
答案 0 :(得分:3)
调用ET.fromstring
一次从CDATA中提取文本。再次调用ET.fromstring
将字符串解析为XML:
import xml.etree.ElementTree as ET
d = '<![CDATA[<Results>.....<Details>....</Details></Results>]]>'
fix = '<root>{}</root>'.format(d)
content = ET.fromstring(fix).text
print(repr(content))
# '<Results>.....<Details>....</Details></Results>'
results = ET.fromstring(content)
print(ET.tostring(results))
# <Results>.....<Details>....</Details></Results>
答案 1 :(得分:1)
在阅读各种奇怪的格式化类XML数据时,您始终可以使用BeautifulSoup:
>>> from bs4 import BeautifulSoup
>>> d="<![CDATA[<Results>.....<Details>....</Details></Results>]]>"
>>> soup=BeautifulSoup(d)
>>> from xml.etree import ElementTree
>>> tree=ElementTree.fromstring(str(soup))
否则,你可以像这样快速破解:
tree = ElementTree.fromstring(outputDataXML.replace("<![CDATA[", "").replace("]]>", ""))