[英]Python LXML: Modify CDATA
当我使用Python LXML模块(特别是lxml.objectify
,但我认为这没有什么区别)处理已解析的XML时,如何保存CDATA?
给出以下结果:
>>> from lxml import objectify, etree
>>> xml = '''
<Root>
<Child>
<![CDATA[abcd]]>
</Child>
</Root>
'''
>>> parser = objectify.makeparser(strip_cdata=False)
>>> parsed = objectify.XML(xml, parser=parser)
>>> etree.tostring(parsed)
'<Root><Child><![CDATA[abcd]]></Child></Root>'
>>> type(parsed.Child)
<type 'lxml.objectify.StringElement'>
>>> parsed.Child.text
'abcd'
>>> parsed.Child = 'efgh'
>>> etree.tostring(parsed)
'<Root><Child xmlns:py="http://codespeak.net/lxml/objectify/pytype" py:pytype="str">efgh</Child></Root>'
我希望最后一行仍然有<![CDATA[....]>
。 但是我看不到任何保存或重新创建它的方法。 尝试访问<Child>
元素的内容会产生一个空字符串,并且修改该元素的内容会神奇地消失CDATA部分。
什么是正确的方法?
>>> from lxml import etree
>>> parser = etree.XMLParser(strip_cdata=False)
>>> parsed = etree.XML('''
... <Root>
... <Child>
... <![CDATA[abcd]]>
... </Child>
... </Root>
... ''', parser)
>>> print etree.tostring(parsed)
<Root>
<Child>
<![CDATA[abcd]]>
</Child>
</Root>
>>> parsed.getchildren()[0].text = etree.CDATA('efgh updated')
>>> etree.tostring(parsed)
'<Root>\n <Child><![CDATA[efgh updated]]></Child>\n </Root>'
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.