lxml解析xml檔案

2021-07-14 14:52:41 字數 1595 閱讀 2974

最近在工作中需要從多個xml檔案中選出一些節點合成乙個新的xml檔案,首先想到的使用python自帶的xml.etree.elementtree模組,但是發現合併後的檔案中原來的cdata部分不對,括號和引號都被轉義了,沒有和原來保持一致,elementtree模組解決不了這個問題,我就想會不會有第三方包能解決這個問題。然後就找到了乙個強大的xml解析包lxml。

lxml和elementtree的用法幾乎一致。下面就簡單的介紹幾個常用的用法。

1.安裝lxml模組後需要匯入lxml模組的etree類

from lxml import etree

2.解析xml檔案

xml_file = etree.parse(r'd:\test.xml')

3.獲取檔案的根節點

root_node = xml_file.getroot()

4.使用for遍歷節點的子節點

for sub_node in root_node:

5.獲取節點的某個屬性的值,下面是獲取some_node節點的name屬性的值

name_value = some_node.attrib['name']

6.設定節點的某個屬性的值,下面是將some_node節點的name屬性的值設為new_name

some_node.set('name', new_name)

7.使用自定義的解析器解析xml,可以定義一些特性,如strip_cdata可以設定在解析xml檔案時是否解析cdata部分

parser = etree.xmlparser(encoding='utf-8',strip_cdata=false)

xml_file = etree.parse(some_file, parser)

8.在release節點的module節點下面插入乙個new_module節點

release.insert(release.index(module)+1,new_module)

9.判斷是否是注釋

if not isinstance(some_node, etree._comment):

如果把含有中文注釋的節點拷貝到另外乙個檔案中,中文會顯示不對,需要編碼一下

str_comment = comment_node.text.encode('utf-8')

10.把生成的xml檔案寫入到file_path檔案中

root = etree.element('root_node')     #生成乙個節點

tree = etree.elementtree(root)         #把root節點作為根節點,生成xml檔案

tree.write(file_path,encoding='utf-8') #把寫入到檔案中

11.節點的tail和text屬性可以用來新增換行符

tail是在節點的末尾新增

some_element.tail='\n'

XML解析庫 lxml 教程 一

本系列文章主要講解如何使用 python3 的 lxml 庫,本篇和第二篇文章主要介紹element物件的介面 工廠函式 在 xml或html 中每一處尖括號代表著乙個標籤或者元素,lxml 庫為了方便操作,封裝了element類,通過element物件可以很方便地操作 xml 的元素 建立elem...

XML解析庫 lxml 教程 二

字典介面 在 xml 或 html 中每乙個標籤都有屬性,element類通過字典介面支援屬性操作 建立帶有屬性的element物件 from lxml import etree 帶屬性的 element root etree.element root name root 序列化為 xml 標籤 r...

建立xml檔案 解析xml檔案

import codecs import xml.dom.minidom doc xml.dom.minidom.document print doc root doc.createelement booklist print u 新增的xml標籤為 root.tagname root.setatt...