如何使用任何xml lib替换节点的完整内容?

时间:2011-06-29 12:39:09

标签: python xml

我正在尝试使用Python解析xml文件,但我有一些可能包含xml数据的标记。例如:

<code>
  <?xml version="1.0" encoding="utf-8"?>
</code>

我想写这样的CDATA标签:

<code><![CDATA[
  <?xml version="1.0" encoding="utf-8"?>
   ]]>
</code>

我尝试过(使用lxml):

a = etree.fromstring(data)
for e in a.findall("code"):
    e.text = etree.CDATA(etree.tostring(e))

但我明白了:

<code><![CDATA[<code><?xml version="1.0" encoding="utf-8"?></code>]]>
<?xml version="1.0" encoding="utf-8"?>
</code>

2 个答案:

答案 0 :(得分:1)

您的替换代码会找到<code>元素并将其序列化为元素的新文本​​。您似乎只想包含<code>元素的 children

尝试将e.text设置为CDATA(e.text),而不是将e序列化。

答案 1 :(得分:0)

(我是在发布后注册的OP)

使用     e.text = etree.CDATA(e.text)

我得到了

<code type="php"><![CDATA[
]]><?php echo $foo;
?>
</code>

代表

<code type="php">
<?php
    echo $foo;
?>
</code>