lxml處理CDATA的備忘

2022-04-10 00:08:51 字數 1569 閱讀 8081

lxml是python的庫,可用於解析、處理xml檔案及html檔案。

在工作中,遇到需要對原有的xml檔案進行改寫,根據需要增加、刪除或改寫一些元素。具體的做法是先用lxml將檔案解析為記憶體裡的dom樹結構,再通過lxml提供的方法對元素進行增、刪、改、查等操作,最後再將記憶體裡的dom樹落回檔案。

示例**如下:

1

from lxml import

etree

2 root = etree.fromstring(str_xml) #

here parse dom tree from a xml string.34

#here do some update on root.5#

........6#

update finish.

78 str_final_xml = etree.tostring(self.root, encoding='

utf-8

', xml_declaration=true) #

here serialize dom tree to a string.

先解析,然後通過一系列查詢,修改,增加,刪除等操作,root對應的dom樹變為我們想要的結果,再將結果dom樹序列化為字串。

這裡遇到了乙個問題。

原來的cdata標籤在重新寫入後都不見了。在網上找了一些討論,才知道原來cdata在xml中不是必須的,所以預設去掉了。

如果想保留原來的cdata,需要在解析xml時自己定義乙個解析器。

**如下所示:

1

from lxml import

etree23

parser = etree.xmlparser(strip_cdata=false)

4 root = etree.fromstring(str_xml, parser) #

here parse dom tree from a xml string.56

#here do some update on root.7#

........8#

update finish.

910 str_final_xml = etree.tostring(self.root, encoding='

utf-8

', xml_declaration=true) #

here serialize dom tree to a string.

第3行自己定義了乙個解析器,引數strip_cdata置為false,這個引數預設是開啟的。在呼叫fromstring時帶上這個解析器。這樣將dom樹再序列化後原始的cdata就可以保留下來。

如果需要寫入乙個cdata元素,lxml也能很高支援。

>>>elem = etree.element('

root')

>>>elem.text = etree.cdata('

this is root.')

>>>

>>>print etree.tostring(elem)

只需要將待寫入的字元用etree.cdata封裝即可。

python的lxml庫簡介 lxml庫

lxml 是 乙個html xml的解析器,主要的功能是如何解析和提取 html xml 資料。lxml和正則一樣,也是用 c 實現的,是一款高效能的 python html xml 解析器,我們可以利用之前學習的xpath語法,來快速的定位特定元素以及節點資訊。需要安裝c語言庫,可使用 pip 安...

CDATA 的基本介紹

被這個標記所包含的內容將表示為純文字,比如表示文字內容 此標記用於xml文件中,我們先來看看使用轉義符的情況。我們知道,在xml中,等字元是不能直接存入的,否則xml語法檢查時會報錯,如果想在xml中使用這些符號,必須將其轉義為實體,如 這樣才能儲存進xml文件。在使用程式讀取的時候,解析器會自動將...

ibatis 的 CDATA 幹嘛的

一直寫sql語句都是直接copy,寫自己想要的,今天看了下究竟這個 居然很簡單,只是為了讓系統知道,並且識別到一些特殊字元,以 結束 只有以下幾種情況才需要,特殊注意,下面說 小於號 大於號 和 單引號 雙引號 micro no 比如這個 task no task no order by date ...