簡體   English   中英

lxml / python使用CDATA部分讀取xml

[英]lxml/python reading xml with CDATA section

在我的xml中,我有一個CDATA部分。 我想保留CDATA部分,然后剝離它。 有人可以提供以下幫助嗎?

默認值不起作用:

$ 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;€ '

這篇文章似乎暗示parser選項strip_cdata=False可以保留cdata,但沒有效果:

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

使用strip_cdata=True (應為默認值)產生相同的結果:

$ parser=etree.XMLParser(strip_cdata=True)
$ tree = etree.parse(StringIO(xml), parser=parser)    
$ tree.getroot().text    
' My Subject: 美海軍研究船勘查台海水文? 船&#xE9;€ '

您已經注意到,即使在解析XML內容時使用strip_cdata=False ,也不會在元素的text屬性中保留CDATA節。 請參閱https://lxml.de/api.html#cdata

在以下情況下, 保留CDATA節:

  1. 使用tostring()序列化時:

     print(etree.tostring(tree.getroot(), encoding="UTF-8").decode()) 
  2. 寫入文件時:

     tree.write("subject.xml", encoding="UTF-8") 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM