• [python]使用xml.dom读写XML文件


    我觉得XML可以理解成为一棵多叉树。一个根节点下,可以有多个子节点,子节点又可以看做是一个根节点继续添加子节点。每个节点上面可以有标签(可以理解为节点的一些属性)。当节点为叶子节点的时候,一般存放一串字符串,可以理解为节点的内容。

    加载dom库

    from xml.dom import minidom

    建立节点

    #建立整个文本
    doc=minidom.Document()
    
    #建立普通节点
    acadamic=doc.createElement("acadamic")#节点名称为acadamic
    
    #简历文本节点,也是是最底层节点
    #比如   <acadamic>Automation</acadamic>
    # "Automation"是acadamic的子节点
    doc.createTextNode("Automation")

    添加子节点

    #给叶子节点添加内容
    acadamic.appendChild(doc.createTextNode("Automation"))
    #给非叶子节点添加子节点
    student1.appendChild(acadamic)

    添加标签

    #给student这个节点添加一个标签id,值设为01
    student1.setAttribute("id","01")

    输出xml

    f=open("f:/school.xml","w")
    doc.writexml(f)
    f.close()

     最终生成

    <?xml version="1.0" ?> 
    - <!-- This is an example!
      --> 
    - <studentlist>
    - <student id="01">
      <acadamic>Automation</acadamic> 
      <school>UESTC</school> 
      </student>
    - <student id="02">
      <acadamic>Communication</acadamic> 
      <school>GDUT</school> 
      </student>
      </studentlist>

    -----------------------------------------------------------------------------------------------------------

    读取XML

    打开XML文件

    doc = minidom.parse("f:/school.xml")

    节点的类型:

    #普通节点
    Node.ELEMENT_NODE
    #备注节点
    Node.COMMENT_NODE
    #文本节点
    Node.TEXT_NODE
    
    #值得注意的是,TEXT_NODE虽然被包围在一个普通节点中间,但它是作为这个普通节点的唯一子节点

    读取XML,除了dom以外,还要import Node

    from xml.dom import minidom,Node

    查看节点的标签、类型与属性与节点的值

    #节点类型
    if child.nodeType==Node.ELEMENT_NODE
    
    #节点标签
    child.tagName=="acadamic"
    
    #节点属性
    student_id=child.getAttribute("id")
    
    #节点的值,叶子节点才能直接返回值
    if node.nodeType==Node.TEXT_NODE:
                return node.nodeValue

    迭代子节点

    for child in node.childNodes:
          if child.nodeType==Node.ELEMENT_NODE and child.tagName=="student":
                  student_id=child.getAttribute("id")
                  print "student id is %s
    " % student_id
                  self.read_student(child)

    由于最后的文本节点肯定是它的父节点的唯一节点,所以一般不需要迭代,直接使用firstChild

    if child.nodeType==Node.ELEMENT_NODE and child.tagName=="school":
                  print "school is %s" % self.read_text(child.firstChild)

    完整代码:https://github.com/iyjhabc/study_examples/blob/master/read_xml.py

  • 相关阅读:
    Merge Intervals
    Insert Interval
    Combination Sum
    Trapping Rain Water II
    Kth Largest in N Arrays
    Spiral Matrix
    Search a 2D Matrix
    Binary Postorder Traversal
    Search in Rotated Sorted Array II
    S3C2440移植uboot之启动过程概述
  • 原文地址:https://www.cnblogs.com/iyjhabc/p/3285354.html
Copyright © 2020-2023  润新知