在我的xml中,有一个CDATA
部分。我想保留CDATA部分,然后剥离它。有人可以提供以下帮助吗?
默认设置无效:
$ from io import StringIO
$ from lxml import etree
$ xml = '<Subject> My Subject: 美海軍研究船勘查台海水文? 船<![CDATA[é]]>€ </Subject>'
$ tree = etree.parse(StringIO(xml))
$ tree.getroot().text
' My Subject: 美海軍研究船勘查台海水文? 船é€ '
This post似乎建议使用parser
选项strip_cdata=False
可以保留cdata,但无效:
$ parser=etree.XMLParser(strip_cdata=False)
$ tree = etree.parse(StringIO(xml), parser=parser)
$ tree.getroot().text
' My Subject: 美海軍研究船勘查台海水文? 船é€ '
使用strip_cdata=True
(应为默认值)会产生相同的结果:
$ parser=etree.XMLParser(strip_cdata=True)
$ tree = etree.parse(StringIO(xml), parser=parser)
$ tree.getroot().text
' My Subject: 美海軍研究船勘查台海水文? 船é€ '
答案 0 :(得分:1)
text
, CDATA节也不会保留在元素的strip_cdata=False
属性中。参见https://lxml.de/api.html#cdata。
CDATA部分 :
使用tostring()
进行序列化时:
print(etree.tostring(tree.getroot(), encoding="UTF-8").decode())
写入文件时:
tree.write("subject.xml", encoding="UTF-8")