python解析XML:ElementTree(元素树)

    xiaoxiao2021-04-11  36

    

     ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

    <root> <person age="18"> <name>hzj</name> <sex>man</sex> </person> <person age="19" des="hello"> <name>kiki</name> <sex>female</sex> </person> </root>

    1.加载xml文件

        加载XML文件共有2种方法,一是加载指定字符串,二是加载指定文件

    2.获取element的方法

      a) 通过getiterator

      b) 过 getchildren

      c) find方法

      d) findall方法

    [python] view plain copy print ? <span style="font-size: 13px;">#-*- coding:utf-8 -*-  from xml.etree import ElementTree  def print_node(node):      '''''打印结点基本信息'''      print "=============================================="      print "node.attrib:%s" % node.attrib      if node.attrib.has_key("age") > 0 :          print "node.attrib['age']:%s" % node.attrib['age']      print "node.tag:%s" % node.tag      print "node.text:%s" % node.text  def read_xml(text):      '''''读xml文件'''      # 加载XML文件(2种方法,一是加载指定字符串,二是加载指定文件)          # root = ElementTree.parse(r"D:/test.xml")      root = ElementTree.fromstring(text)            # 获取element的方法      # 1 通过getiterator       lst_node = root.getiterator("person")      for node in lst_node:          print_node(node)                # 2通过 getchildren      lst_node_child = lst_node[0].getchildren()[0]      print_node(lst_node_child)                # 3 .find方法      node_find = root.find('person')      print_node(node_find)            #4. findall方法      node_findall = root.findall("person/name")[1]      print_node(node_findall)        if __name__ == '__main__':       read_xml(open("test.xml").read())   </span>   #-*- coding:utf-8 -*- from xml.etree import ElementTree def print_node(node): '''打印结点基本信息''' print "==============================================" print "node.attrib:%s" % node.attrib if node.attrib.has_key("age") > 0 : print "node.attrib['age']:%s" % node.attrib['age'] print "node.tag:%s" % node.tag print "node.text:%s" % node.text def read_xml(text): '''读xml文件''' # 加载XML文件(2种方法,一是加载指定字符串,二是加载指定文件) # root = ElementTree.parse(r"D:/test.xml") root = ElementTree.fromstring(text) # 获取element的方法 # 1 通过getiterator lst_node = root.getiterator("person") for node in lst_node: print_node(node) # 2通过 getchildren lst_node_child = lst_node[0].getchildren()[0] print_node(lst_node_child) # 3 .find方法 node_find = root.find('person') print_node(node_find) #4. findall方法 node_findall = root.findall("person/name")[1] print_node(node_findall) if __name__ == '__main__': read_xml(open("test.xml").read())

    想想为什么?不明白,请看下面

    [python] view plain copy print ? #encoding=utf-8  from xml.etree import ElementTree as ET  #要找出所有人的年龄  per=ET.parse('test.xml')  p=per.findall('/person')  for x in p:      print x.attrib  print  for oneper in p:  #找出person节点      for child in oneper.getchildren(): #找出person节点的子节点          print child.tag,':',child.text        print 'age:',oneper.get('age')      print '############'   #encoding=utf-8 from xml.etree import ElementTree as ET #要找出所有人的年龄 per=ET.parse('test.xml') p=per.findall('/person') for x in p: print x.attrib print for oneper in p: #找出person节点 for child in oneper.getchildren(): #找出person节点的子节点 print child.tag,':',child.text print 'age:',oneper.get('age') print '############'

    结果如下:

    [python] view plain copy print ? {'age''18'}  {'age''19''des''hello'}    name : hzj  sex : man  age: 18  ############  name : kiki  sex : female  age: 19  ############  

    转载请注明原文地址: https://ju.6miu.com/read-666634.html

    最新回复(0)