首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用CDATA部分读取xml的lxml/python

用CDATA部分读取xml的lxml/python
EN

Stack Overflow用户
提问于 2018-11-23 23:17:15
回答 1查看 2.3K关注 0票数 0

在我的xml中有一个CDATA部分。我想保留CDATA部分,然后剥去它。有人能帮上忙吗?

默认值不起作用:

代码语言:javascript
运行
复制
$ from io import StringIO
$ from lxml import etree
$ xml = '<Subject> My Subject: 美海軍研究船勘查台海水文? 船<![CDATA[&#xE9;]]>€ </Subject>'
$ tree = etree.parse(StringIO(xml))
$ tree.getroot().text
' My Subject: 美海軍研究船勘查台海水文? 船&#xE9;€ '

This post似乎建议parser选项strip_cdata=False可以保留cdata,但没有效果:

代码语言:javascript
运行
复制
$ parser=etree.XMLParser(strip_cdata=False)
$ tree = etree.parse(StringIO(xml), parser=parser)
$ tree.getroot().text    
' My Subject: 美海軍研究船勘查台海水文? 船&#xE9;€ '

使用strip_cdata=True (应该是默认的)会产生相同的结果:

代码语言:javascript
运行
复制
$ parser=etree.XMLParser(strip_cdata=True)
$ tree = etree.parse(StringIO(xml), parser=parser)    
$ tree.getroot().text    
' My Subject: 美海軍研究船勘查台海水文? 船&#xE9;€ '
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-24 07:02:00

CDATA部分不保留在元素的text属性中,即使在解析XML时使用strip_cdata=False,正如您已经注意到的。见https://lxml.de/api.html#cdata

在这些情况下,CDATA部分保存如下:

  1. 在用tostring()序列化时: 打印(etree.tostring(tree.getroot(),encoding="UTF-8").decode())
  2. 写入文件时: tree.write("subject.xml",encoding="UTF-8")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53453791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档