2014-09-12 65 views
5

我批量轉換大量的XML文件,改變他們的字符編碼成UTF-8:LXML殺死我的CDATA部分

with open(source_filename, "rb") as source: 
    tree = etree.parse(source) 

    with open(destination_filename, "wb") as destination: 
     tree.write(destination, encoding="UTF-8", xml_declaration=True) 

不幸的是,它毀了我CDATA部分,只是逃避他們,而不是。

來源

<d><![CDATA[áÌÀøÅàùÑÄéú ëÌÄé áÈàÅùÑ éäå''ä ðÄùÑÀôÌÈè <small><small>(ùí ëå èæ)</small></small> 

目的地

<d>בְּרֵאשִׁית כִּי בָאֵשׁ יהו''ה נִשְׁפָּט &lt;small&gt;&lt;small&gt;(שם כו טז)&lt;/small&gt;&lt;/small&gt; 

有哪些我可以設置它會告訴它不要動我的CDATA節的設置?我主要使用LXML來更改字符編碼並正確編寫XML頭。

回答

11

使用strip_cdata=False option

import lxml.etree as etree 
parser = etree.XMLParser(strip_cdata=False) 
with open(source_filename, "rb") as source: 
    tree = etree.parse(source, parser=parser) 
+0

相關文檔:http://lxml.de/api.html#cdata – 2014-09-12 17:42:21