xml.domのminidomモジュールを使用してxmlを読み書きする

4813 ワード

仕事の原理のため1つのxmlのあるいくつかのノードを別のxmlの中に書き込む必要があるため、ネット上で長い間座っていたが、適切なコードが見つからなかった(PS:本人が怠け者なので、直接使えるコードが見つからなかった:-)ので、Pythonのいくつかのxmlパッケージを探して、自分で書いたxmlファイルを読んで、別のxmlファイルに挿入して、ソースコードは貼らなかった.次に使用する関数を以下のように整理して、後で使用します.整理したこれらは基本的にxmlの追加削除と変更操作を全面的に行うことができる(ネットユーザーの補充を歓迎する).
すべてのgetが返すノードタイプはすべてlistです!
すべてのgetが返すノードタイプはすべてlistです!
すべてのgetが返すノードタイプはすべてlistです!
import codecs
from xml.dom import minidom  #python         

1、xmlを読む
xmlは、現在のノードの下にあるすべての同名ノードを再帰的に読み込みます.
    
        66
        
            66
        
    
  get    age      age   get 
    1.   xml  
        dom = minidom.parse(file) 
    2.      
        root = dom.documentElement  
    3.                     
        nodes = root.getElementsByTagName(nodeName) ⇒ 
    4.                     
        attr = node.getAttribute(attrname) ⇒ 
        content = node.firstChild.data //           ⇒  this is data 
    5.       
        node.toxml() //       
        node.toprettyxml() //     

ステップ4では、息子ノード、孫ノード、曽孫ノードなど、現在のノードの下にあるすべての同名ノードを取得します.
2、xmlを書く
    1.   DOM   :
        dom = minidom.Document()
    2.      。 ==>  DOM       ,               
        rootNode = dom.createElement(rootName) 
    3.     
        dom.appendChild(rootNode) //            appendChild()   
    4.        
        node.setAttribute(key, value) ⇒ 
    5.       
        node.createTextNode(content) //              ==> content
                  
        nodes.appendChild(node) // nodes     
    6.     
        f = codecs.open('1.xml','w','utf-8') 
        dom.writexml(f,addindent='  ',newl='
',encoding = 'utf-8') // - - : Node = dom.createElement("node") # xml Node.setAttribute(key, value) # xml Value = dom.createTextNode("txt") # Node.appendChild(Value) # xml addNode.appendChild(Node) # xml writexml writexml。 .py ( down , )
def fixed_writexml(self, writer, indent="", addindent="", newl=""):
    # indent = current indentation
    # addindent = indentation to add to higher levels
    # newl = newline string
    writer.write(indent+" + self.tagName)

    attrs = self._get_attributes()
    a_names = attrs.keys()
    a_names.sort()

    for a_name in a_names:
        writer.write(" %s=\"" % a_name)
        minidom._write_data(writer, attrs[a_name].value)
        writer.write("\"")
    if self.childNodes:
        if len(self.childNodes) == 1 \ 
          and self.childNodes[0].nodeType == minidom.Node.TEXT_NODE:
            writer.write(">")
            self.childNodes[0].writexml(writer, "", "", "") 
            writer.write("%s>%s" % (self.tagName, newl))
            return
        writer.write(">%s"%(newl))
        for node in self.childNodes:
            if node.nodeType is not minidom.Node.TEXT_NODE:
                node.writexml(writer,indent+addindent,addindent,newl)
        writer.write("%s%s>%s" % (indent,self.tagName,newl))
    else:
        writer.write("/>%s"%(newl))

minidom.Element.writexml = fixed_writexml