2014-09-12 30 views
5

Ben toplu dönüştürme UTF-8 için kendi karakter kodlamaları, XML dosyaları bir çok değişiyor:LXML benim CDATA bölümleri öldürür

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) 

Ne yazık ki, benim CDATA bölümleri tahrip ediyor ve sadece yerine onları kaçan.

Kaynak:

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

Hedef:

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

Ben yalnız benim CDATA bölümleri bırakmak söyleyecektir hangi ayarlayabileceğiniz bir ayar var mı? Karakter kodlamasını değiştirmek ve XML başlığını düzgün yazmak için LXML kullanıyorum.

cevap

11

Kullanım 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

İlgili doc: http://lxml.de/api.html#cdata –