Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
503 views
in Technique[技术] by (71.8m points)

python - LXML kills my CDATA sections

I'm batch-converting a lot of XML files, changing their character encodings to UTF-8:

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)

Unfortunately, it is destroying my CDATA sections and just escaping them instead.

Source:

<d><![CDATA[áìà??àù??éú ?ì?é áèà?ù? é??''? e?ù?à?ìèè <small><small>(ùí ?? è?)</small></small>

Destination:

<d>????????? ??? ????? ???''? ??????? &lt;small&gt;&lt;small&gt;(?? ?? ??)&lt;/small&gt;&lt;/small&gt;

Is there a setting which I can set which will tell it to leave my CDATA sections alone? I'm mainly using LXML to change the character encoding and to write the XML header properly.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Use the 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)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...