2011-06-29 29 views
3

我想解析一個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

你的問題在哪裏? Afaict您的示例作品完美無瑕。 – Constantinius

+0

我只是想用相同的內容替換所有節點的內容,但是使用CDATA標籤。 – luxcem

回答

1

您的替換代碼找到<code>元素並將其序列化爲元素的新文本​​。但是,您似乎只想包含<code>元素的子女

嘗試將設置e.text改爲CDATA(e.text)而不是序列化e的結果。

0

(我張貼後,我註冊了OP)

隨着 e.text = etree.CDATA(e.text)

我得到

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

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

因爲e.text僅包含純文本而不包含全部節點的全部內容。 – luxcem