zoukankan      html  css  js  c++  java
  • 【Python】etree方法生成,解析xml

    #练习:另一种遍历xml文件的方式etree,xpath
    import sys
    try:
    import xml.etree.cElementTree as ET #前面带c的都是比较快的,效率高且不占内存的,优先使用这个
    except ImportError:
    import xml.etree.ElementTree as ET

    tree = ET.ElementTree(file='e:\movie.xml')
    root=tree.getroot()
    print root.tag #打印根tag
    print root.attrib #打印属性

    for child_of_root in root:
    print child_of_root.tag
    print "********", child_of_root.attrib


    print "*"*50

    print root[0].tag
    print root[0].text #“打印的内容为一个回车”
    print root[0][0].tag
    print root[0][0].text
    print root[0][1].tag
    print root[0][1].text

    print "*"*50
    for elem in tree.iter(): #递归遍历所有子元素
    print elem.tag, elem.text, elem.attrib #属性返回的是一个字典

    print "*"*50
    for elem in tree.iterfind('movie/type'): #查找movie下一级节点中的所有type标签
    print elem.tag, elem.text,elem.attrib

    print "*"*50
    for elem in tree.iter(tag='stars'): #在整个树中查找标签为star的元素
    print elem.tag, elem.text,elem.attrib

    print "*"*50
    for elem in tree.iterfind('*[@title="Ishtar"]'): #在下一级节点查找属性为title="Ishtar"的元素
    print elem.tag, elem.text,elem.attrib

    print "*"*50
    for elem in tree.iterfind('movie[@title="Ishtar"]'): #查找属性为title="Ishtar"的元素
    print elem.tag, elem.attrib


    print "*"*50
    root = tree.getroot() #获取第一级movie元素
    print "first movie:",root[0].tag #打印第一级movie元素的标签,为movie
    print "subnode:",root[0][0].tag #打印第一级movie元素下的第一个子元素标签type
    print "subnode:",root[0][1].tag #打印第一级movie元素下的第二个子元素标签format
    print "subnode:",root[0][2].tag #打印第一级movie元素下的第三个子元素标签year
    print "subnode:",root[0][3].tag #打印第一级movie元素下的第四个子元素标签rating
    print "subnode:",root[0][4].tag #打印第一级movie元素下的第五个子元素标签stars
    print "subnode:",root[0][5].tag #打印第一级movie元素下的第五个子元素标签description

    print "*"*50
    del root[0][4] #删除第一级movie元素下的第四个子元素
    del root[0][3] #删除第一级movie元素下的第三个子元素
    del root[0][2] #删除第一级movie元素下的第二个子元素
    del root[0][1] #删除第一级movie元素下的第一个子元素

    del root[3] #删除第四个movie元素
    del root[2] #删除第三个movie元素

    print "*"*50
    for subelem in root:
    print subelem.tag, subelem.attrib #打印第一个movie和第二个movie元素的标签和属性


    print "*"*50
    print tree.write(sys.stdout) #将xml文件的内容写到屏幕上
    tree.write("e:\movie.xml") #将变更的xml文件写入到文件中


    #练习:生成xml
    import sys
    try:
    import xml.etree.cElementTree as ET
    except ImportError:
    import xml.etree.ElementTree as ET

    a = ET.Element('elem') #生成一个节点elem,没有文本节点
    c = ET.SubElement(a, 'child1') #生成一个字节点下的子节点child1
    c.text = "some text" #在子节点上添加文本节点
    d = ET.SubElement(a, 'child2') #生成一个字节点下的子节点child2
    b = ET.Element('elem_b') #生成一个节点elem_b,没有文本节点
    root = ET.Element('root') #生成一个节点root
    root.extend((a, b)) #将a、b两个变量存储的节点elem和elem1添加到root节点下
    tree = ET.ElementTree(root) #生成节点树
    root[0].set('foo', 'bar') #设定第一个子元素的属性foo,值为bar
    tree.write(sys.stdout) #打印节点树
    tree.write("d:\test.xml") #将xml文件内容写入到文本文件中

  • 相关阅读:
    正经学C#_循环[do while,while,for]:[c#入门经典]
    Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常
    asp.net core 获取当前请求的url
    在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be
    用orchard core和asp.net core 3.0 快速搭建博客,解决iis 部署https无法登录后台问题
    System.Data.Entity.Core.EntityCommandExecution The data reader is incompatible with the specified
    初探Java设计模式3:行为型模式(策略,观察者等)
    MySQL教程77-CROSS JOIN 交叉连接
    MySQL教程76-HAVING 过滤分组
    MySQL教程75-使用GROUP BY分组查询
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/8667254.html
Copyright © 2011-2022 走看看