xml.domのminidomモジュールを使用してxmlを読み書きする
4813 ワード
仕事の原理のため1つのxmlのあるいくつかのノードを別のxmlの中に書き込む必要があるため、ネット上で長い間座っていたが、適切なコードが見つからなかった(PS:本人が怠け者なので、直接使えるコードが見つからなかった:-)ので、Pythonのいくつかのxmlパッケージを探して、自分で書いたxmlファイルを読んで、別のxmlファイルに挿入して、ソースコードは貼らなかった.次に使用する関数を以下のように整理して、後で使用します.整理したこれらは基本的にxmlの追加削除と変更操作を全面的に行うことができる(ネットユーザーの補充を歓迎する).
すべてのgetが返すノードタイプはすべてlistです!
すべてのgetが返すノードタイプはすべてlistです!
すべてのgetが返すノードタイプはすべてlistです!
1、xmlを読む
xmlは、現在のノードの下にあるすべての同名ノードを再帰的に読み込みます.
ステップ4では、息子ノード、孫ノード、曽孫ノードなど、現在のノードの下にあるすべての同名ノードを取得します.
2、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