在我的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: 美海軍研究船勘查台海水文? 船é€ '
发布于 2018-11-24 07:02:00
CDATA部分不保留在元素的text
属性中,即使在解析XML时使用strip_cdata=False
,正如您已经注意到的。见https://lxml.de/api.html#cdata。
在这些情况下,CDATA部分保存如下:
tostring()
序列化时:
打印(etree.tostring(tree.getroot(),encoding="UTF-8").decode())https://stackoverflow.com/questions/53453791
复制相似问题