本系列文章主要講解如何使用 python3 的 lxml 庫, 本篇和第二篇文章主要介紹element
物件的介面
工廠函式
在 xml或html 中每一處尖括號代表著乙個標籤或者元素, lxml 庫為了方便操作, 封裝了element
類, 通過element
物件可以很方便地操作 xml 的元素
建立element
物件
from lxml import etree
# 建立根元素
root = etree.element(
"root"
)# 檢視標籤名
print
("root.tag: "
, root.tag)
列印結果
root.tag: root
新增subelement
物件, 組成有層級關係的 elements
# 直接新增
"child_1"))
# 通過工廠函式
child_2 = etree.subelement(root,
"child_2"
)child_3 = etree.subelement(root,
"child_3"
)
將 elements 序列化為 xml 樹
xml_s = etree.tostring(root, pretty_print=
true
).decode(
'utf-8'
)print
("xml tree:"
, xml_s, sep=
'\n'
)
列印結果
xml tree:
>
/>
/>
/>
root
>
沒有子元素時, lxml 自動生成單標籤
這樣我們直接通過 lxml 庫建立了乙個 xml 文件
列表介面
每乙個 element 物件相當於乙個列表容器, 其內容為直接子元素, 操作方法與內建列表很相似
索引
child = root[0]
print
("root[0]:"
, child.tag)
root[0]: child_1
結果為首個新增的子元素
切片
# 切片 (僅包含 child_3)
root_slice = root[-1
:]print
("slice:"
,type
(root_slice)
)
slice:
切片的結果為內建列表
列表方法
# 查詢
idx = root.index(child)
print
("child idx:"
, idx)
# 插入
root.insert(
0, etree.element(
"child_0"))
# 附加
# 刪除
del root[-1
]# 追加 (補回 child_3)
root.extend(root_slice)
child idx: 0
在 root 起始位置新增了 child_0, 隨後刪除了 child_3, 通過 extend 在末尾補回 child_3
遍歷
for ele in root:
print
(ele.tag)
child_0
child_1
child_2
child_3
element 物件與列表有乙個細小的差別, element 列表成員之間賦值, lxml 會刪除賦值元素
root[0]
= root[-1
]for ele in root:
print
(ele.tag)
child_3
child_1
child_2
最後乙個元素的位置被刪除了, 這麼做是避免修改其中的乙個元素, 另乙個元素也會相應被修改
元素關係
父元素與相鄰元素
print
("parent:"
, root is child.getparent())
# root[1] 之前是 root[0]
print
("before:"
, root[0]
is root[1]
.getprevious())
# root[1] 之後是 root[2]
print
("after: "
, root[2]
is root[1]
.getnext(
))
列印結果
parent: true
before: true
after: true
XML解析庫 lxml 教程 二
字典介面 在 xml 或 html 中每乙個標籤都有屬性,element類通過字典介面支援屬性操作 建立帶有屬性的element物件 from lxml import etree 帶屬性的 element root etree.element root name root 序列化為 xml 標籤 r...
lxml解析xml檔案
最近在工作中需要從多個xml檔案中選出一些節點合成乙個新的xml檔案,首先想到的使用python自帶的xml.etree.elementtree模組,但是發現合併後的檔案中原來的cdata部分不對,括號和引號都被轉義了,沒有和原來保持一致,elementtree模組解決不了這個問題,我就想會不會有第...
Python 之lxml解析庫
一 xpath常用規則 二 解析html檔案 from lxml import etree 讀取html檔案進行解析 defparse html file html etree.parse test.html parser etree.htmlparser print etree.tostring ...