zoukankan      html  css  js  c++  java
  • 节点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不见了
  • 相关阅读:
    ($children,$refs,$parent)的使用
    watch监听变化
    vue组件间通信六种方式(完整版)
    CSS水平垂直居中常见方法总结2
    CSS水平垂直居中常见方法总结
    Uncaught SyntaxError: Unexpected identifier 报错 import Vue from 'vue';
    前端跳槽面试必备
    防止重复发送Ajax请求问题
    JQuery中的$().each 以及 $.each的区别
    数组中的forEach和map的区别
  • 原文地址:https://www.cnblogs.com/shiliye/p/11739527.html
Copyright © 2011-2022 走看看