从XML中删除CDATA

2024-10-01 11:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pythonsuds开发soapapi。在

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: syntax error: line 1, column 0

对于这种情况,除了使用正则表达式外,最好的方法是什么?在


Tags: 数据apierrorxmldetailsresultssudswsdl
2条回答

在读取所有格式怪异的类似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))

否则,您可以像这样快速破解:

^{pr2}$

调用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>

相关问题 更多 >