节点List相关操作

为方便遍历子节点,lxml将节点list的操作尽可能的与python处理list的方式一样保持一致

创建XML

from lxml import etree
root = etree.Element("root") #创建根节点
root.append(etree.Element("child1"))  #创建子节点child1
child2 = etree.SubElement(root, "child2") #创建子节点child2
child3 = etree.SubElement(root, "child3") #创建子节点child3
具体的xml文件结构如下:
<
root> <child1></child1> <child2></child2> <child3></child3> </root>

获取当前节点指定索引处子节点

child = root[0]
print(child.tag) #输出:child1

获取当前节点子节点个数

print(len(root)) #输出:3

获取节点在父节点中的索引

print(root.index(root[1])) #输出:1

子节点遍历

children = list(root)
for child in children:
    print(child.tag)
#
for child in root: print(child.tag)

子节点插入

root.insert(0, etree.Element("child0"))

节点List操作

start = root[:1]
end = root[-1:]
print(start[0].tag)  #输出:child0
print(end[0].tag)  #输出:child3

包含子节点判断

#不推荐:
if root:
    print("The root element has children")

#推荐: 该种方式更能让人读懂是用来判断节点是否包含子节点的
if len(root):
    print("The root element has children")

父节点判断

print(root is root[0].getparent())  #输出:True

相邻节点判断

print(root[0] is root[1].getprevious())  #输出:True
print(root[1] is root[0].getnext())  #输出:True

节点判断

print(etree.iselement(root)) #输出:True
root11=''
print(etree.iselement(root11)) #输出:False,因为root11只是变量

节点移动

for child in root:
    print(child.tag)

'''输出:
child0
child1
child2
child3
'''

root[0] = root[-1] #child3是移动到了index为0的位置,它覆盖了child1
for child in root: print(child.tag) '''输出: child3 child1 child2 '''

节点拷贝

如果要将元素复制到lxml.etree中的其他位置,请考虑使用python标准库中的copy模块创建一个独立的深度复制

from lxml import etree
from copy import deepcopy

root = etree.Element("root") #创建根节点
root.append(etree.Element("child1"))  #创建子节点child1
child2 = etree.SubElement(root, "child2") #创建子节点child2
child3 = etree.SubElement(root, "child3") #创建子节点child3

element = etree.Element("neu")
element.append(deepcopy(root[1]))
print(element[0].tag)  #输出:child2
print([ c.tag for c in root ])   #输出:['child1', 'child2', 'child3'],原root节点下的子节点没有变化

element01 = etree.Element("neu01")
element01.append(root[1])
print(element01[0].tag)  #输出:child2
print([ c.tag for c in root ])   #输出:['child1', 'child3'],原root节点下的子节点有变化,child2不见了
原文地址:https://www.cnblogs.com/shiliye/p/11739527.html