zoukankan      html  css  js  c++  java
  • python使用minidom读写xml

    1. xml简介

      xml解析方法有两种标准: SAX和DOM。

    1.1 SAX

      SAX(Simple API for XML)是基于事件处理的,当XML文档顺序读入时,每次遇到一个元素都会触发相应的事件处理函数来处理。是一种流式处理,

        优点:占用内存小,处理速度快。

        缺点:处理过程比较麻烦。

    1.2 DOM

      DOM(Document Object Model)是通过一构建一个树结构来表现整个xml文档的,一旦被构建,可以通过DOM提供的接口来遍历树和提取相应的数据。

        优点:操作方便;

        缺点:占用内存大,速度慢;

    2.python中xml操作

       python中还提供了独特的xml解析方法。相比与SAX和DOM容易操作,更加快速,此方法为ElementTree。

      1)xml.dom.minidom

      2) xml.ElementTree

      3)xml.sax + xml.dom

    2.1使用xml.dom.minidom来读写xml

    from xml.dom import minidom
    
    doc = minidom.parse("employees.xml")
    root = doc.documentElement
    employees = root.getElementsByTagName('employee')
    
    for e in employees:
        print e.nodeName
        print e.toxml()
    
        nameNode = e.getElementsByTagName("name")[0]
        print nameNode.childNodes
        print (nameNode.nodeName + ":" + nameNode.childNodes[0].nodeValue)
        ageNode = e.getElementsByTagName('age')[0]
        print ageNode.childNodes
        print ageNode.nodeName + ":" + ageNode.childNodes[0].nodeValue
    
        for n in e.childNodes:
            print n

     2.2使用xml.dom.minidom来生成xml

    import  xml.dom.minidom
    impl  =  xml.dom.minidom.getDOMImplementation()
    dom  =  impl.createDocument(None,  ' employees ' , None)
    root  =  dom.documentElement  
    employee  =  dom.createElement( ' employee ' )
    employee.setAttribute('id', '12') root.appendChild(employee) nameE
    = dom.createElement( ' name ' ) nameT = dom.createTextNode( ' linux ' ) nameE.appendChild(nameT) employee.appendChild(nameE) ageE = dom.createElement( ' age ' ) ageT = dom.createTextNode( ' 30 ' ) ageE.appendChild(ageT) employee.appendChild(ageE) f = open( ' employees2.xml ' , ' w ' , encoding = ' utf-8 ' ) dom.writexml(f, addindent = ' ' , newl = ' \n ' ,encoding = ' utf-8 ' ) f.close()


     2.3使用minidom注意事项

    • 使用parse()或者createDocument()返回的为DOM对象
    • 使用DOM的documentElement属性可以锋利RootElement;
    • DOM为树形结构,包含许多的nodes,其中element是node的一种,可以包含了node; textNode也是一种node,但它只能作为树叶
    • 每个node都有nodeName, nodeValue,nodeType属性,nodeValue是结点的值,只对textNode有效。对于textNode想等到他的文本内容可以使用: .data属性
    • nodeType是结点的类型,现在有以下:

    'ATTRIBUTE_NODE'

        'CDATA_SECTION_NODE'

        'COMMENT_NODE'

        'DOCUMENT_FRAGMENT_NODE'

        'DOCUMENT_NODE'

        'DOCUMENT_TYPE_NODE'

        'ELEMENT_NODE'

        'ENTITY_NODE'

        'ENTITY_REFERENCE_NODE'

        'NOTATION_NODE'

        'PROCESSING_INSTRUCTION_NODE'

        'TEXT_NODE'

  • 相关阅读:
    WCF Security系列(1)Security概述
    转:如何修复Team Foundation Server Workgroup Edition 不小心删除了所有Team Foundation Licensed Users组内用户问题
    转:最真实的2006年应届毕业生真实薪水
    如果为网站生成自签名SSL证书
    转 :TFS(Team Foundation Server)使用经验
    The sequence 2 序列2 攻略 (第4049关)
    力扣 223. 矩形面积
    The sequence 2 序列2 攻略 (第5059关)
    The sequence 2攻略 序列2攻略(第3039关)
    题解 P1147 【连续自然数和】
  • 原文地址:https://www.cnblogs.com/Mingxx/p/3027228.html
Copyright © 2011-2022 走看看