python基础-ElementTree、minidom解析xml

来源:互联网 发布:你别无选择 知乎 编辑:程序博客网 时间:2024/06/07 06:37

        • minidom
        • ElementTree

xml文件如下:

<?xml version="1.0"?><data>  <country name="Singapore">    <rank>4</rank>    <year>2011</year>    <gdppc>59900</gdppc>    <neighbor name="Malaysia" direction="N"/>  </country>  <country name="Panama">    <rank>68</rank>    <year>2011</year>    <gdppc>13600</gdppc>    <neighbor name="Costa Rica" direction="W"/>    <neighbor name="Colombia" direction="E"/>  </country></data>

minidom

from xml.dom.minidom import parseimport xml.dom.minidom# 使用minidom解析器打开XML文档DOMTree = xml.dom.minidom.parse("country.xml")Data = DOMTree.documentElement#data不含name属性if Data.hasAttribute("name"):    print("name element : %s" % Data.getAttribute("name"))# 在集合中获取所有国家Countrys = Data.getElementsByTagName("country")# 打印每个国家的详细信息for Country in Countrys:    if Country.hasAttribute("name"):        print("name: %s" % Country.getAttribute("name"))    rank = Country.getElementsByTagName('rank')[0]    print("rank: %s" % rank.childNodes[0].data)    year = Country.getElementsByTagName('year')[0]    print("year: %s" % year.childNodes[0].data)    gdppc = Country.getElementsByTagName('gdppc')[0]    print("gdppc: %s" % gdppc.childNodes[0].data)    for neighbor in Country.getElementsByTagName("neighbor"):        print(neighbor.tagName, ":", neighbor.getAttribute("name"), neighbor.getAttribute("direction"))    print("-----------next-----------------")

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/python.pyname: Singaporerank: 4year: 2011gdppc: 59900neighbor : Malaysia N-----------next-----------------name: Panamarank: 68year: 2011gdppc: 13600neighbor : Costa Rica Wneighbor : Colombia E-----------next-----------------Process finished with exit code 0

ElementTree

import xml.etree.ElementTreetry:    import xml.etree.cElementTree as ETexcept ImportError:    import xml.etree.ElementTree as ETimport sys# 打开xml文档tree = ET.parse("country.xml")print("---获得root节点-------")root = tree.getroot()print(root.tag, root.attrib)print("---获得root节点下的二级节点-------")for child in root:    print(child.tag, "---", child.attrib)print("------通过下标访问--------")print(root[0][1].text) # 通过下标访问print(root[0].tag)print("------获取特地的节点--------")for country in root.findall('country'):  # 找到root节点下的所有country节点    rank = country.find('rank').text  # 子节点下节点rank的值    name = country.get('name')  # 子节点下属性name的值    print(name, rank)print("--修改xml-------")for country in root.findall('country'):    rank = int(country.find('rank').text)    if rank > 50:        root.remove(country)tree.write('output.xml')

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/python.py---获得root节点-------data {}---获得root节点下的二级节点-------country --- {'name': 'Singapore'}country --- {'name': 'Panama'}------通过下标访问--------2011country------获取特地的节点--------Singapore 4Panama 68--修改xml-------Process finished with exit code 0

output.xml

<data>  <country name="Singapore">    <rank>4</rank>    <year>2011</year>    <gdppc>59900</gdppc>    <neighbor direction="N" name="Malaysia" />  </country>  </data>