gpt4 book ai didi

Python LXML : Modify CDATA

转载 作者:行者123 更新时间:2023-12-01 03:54:46 25 4
gpt4 key购买 nike

当我操作使用 Python LXML 模块解析的 XML(特别是 lxml.objectify ,但我认为这没有什么区别)时,如何保留 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>'
>>>

关于Python LXML : Modify CDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37661822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com