python xmlファイル処理

xmlファイル:

< メイプル> 
  < ジョブ= "Job.xml" > 
    < パラメータ> 
      < パラメータタイプ= "シングル" 可視= "真の" 読み取り専用= "True"を= "タイプ" の値= "実行"  /> 
      < パラメータタイプ=」シングル」可視= "真の" 読み取り専用= "真" の名前= "バージョン" の値= "1.1.2"  /> 
    </ パラメーター> 
    <画像> 
      < 画像=「」場所= "" > 
        < ワークロードのバージョン= "" > 
          < ワークロード= "streamServer" 場所= "C:\ SVSHARE \メープル\ビン\ワークロード\ streamServer" > 
            < パラメータ> 
              < パラメータタイプ= "シングル" 目に見える"=真" 読み取り専用=" false」の名前= "スレッド" = "56"  /> 
              < パラメータタイプ= "シングル" 可視= "真"読み取り専用= "false"の名前= "RetriesOnError" バリュー= "1"  /> 
              < パラメータータイプ= "複数" 可視= "真の" 読み取り専用= "false"の名前= "OS" の値= "POSIX"  /> 
              < > 
                 < >勝つ</ > 
                 < > POSIX </ バリュー> 
              </ > 
            </ パラメーター> 
          </ ワークロード> 
        </ ワークロード> 
      </ 画像> 
    </ イメージ>
  </ 求人> 
</ メープル>
コードの表示

 

三つの方法で取得したルートノード
XMLDOCのASインポートxml.etree.ElementTree
ルート= xmlDoc.parse( 'のtest.xml')._ルート#_root同じgetRoot()
ルート= xmlDoc.ElementTree(FILE = 'のtest.xml')。 getRoot()
ルートxmlDoc.fromstring =(オープン( 'のtest.xml')。読みます())

遍历查找
ルートでの子供のために:
  プリントchild.tag
    子の子供たちのため:
      プリントchildren.tag

索引付け直接アクセス
ルートを[0] [1] [0] [0] [0] [0] [3] [0]の.text
ルート[0] [0] [0]に.get( 'タイプ')

 

検索を見つけ、最初のマッチ
root.find(「仕事」)。ATTRIBの #はジョブ直接の子ノードに直接の子ノードを見つける
root.find(「ジョブ/パラメータ/パラメータ 」)。ATTRIB [ 『値』]#の検索パラメータの下で仕事/パラメータ/すべての直接の子ノードと、第1の直接の子ノードを返し
root.find(「ジョブ/パラメータ/パラメータ [名= 『メープルバージョン』とタイプ= 『シングル』 @]を」)。ATTRIB [ 「値」]#ジョブ/パラメータ/パラメータの下のすべての直接の子ノードを見つけて、名前=「メープルVersino」この直接の子ノードを返します。

全ての配列返し一致検索#findall
[0 root.findall(「ジョブ」) ] .TAG#1 ジョブ直接の子は、直系子ノードが配列返し見つける
root.findall(「ジョブ/パラメータ/パラメータを [」) 1] .attrib [「名前」] #はジョブ/パラメータ/パラメータの下にあるすべての直接の子ノードの配列を返す
root.findall(「ジョブ/パラメータ/パラメータ[名@ = 『タイプ』]」)位/ジョブ/パラメータを返しますパラメータ名=「タイプ」の配列の直接の子ノード

#it​​er見
root.iter(「値」に私のために ):#の値は、文書内のノードを見つけ、発電機の
  印刷i.text

##修改テキスト
XMLDOCのようインポートxml.etree.ElementTree
ツリー= xmlDoc.parse( 'のtest.xml')
ルート= tree.getroot()
root.iterで私のために( '値'):
  もしi.text == '勝利':
  i.text =' Linuxの
印刷xmlDoc.dump(ルート)#预览
tree.write(' a.xml」、エンコード= 'UTF-8')#保存


#のプロパティ変更
[0]に.get( '名前がルートを ') プロパティを取得
ルートを[0] .SET( '名前 '、 'AAA') 更新、属性の追加
・デルroot.attrib [ 'タイプ']属性を削除します

#ノード削除
root.remove(ルート[0])
tree.write( 'a.xml'、エンコード= 'UTF-8')を

#ノードの追加
XMLDOCとしてインポートxml.etree.ElementTreeを

ツリー= xmlDoc.parse( 'a.xml')
ルート= tree.getroot()

Node_1の= xmlDoc.Element( 'メープル' { '値': 'ノード1'})#は、ノードを作成
node_1.tailを= '\ n'は#インデント

node_2 = xmlDoc.SubElement(Node_1のは、「仕事 ')#は、 子ノードの作成
( '100'、 '値')node_2.setを
' = '10 node_2.text

root.insert(1、Node_1の)#appendの
root.append(Node_1の)#insert

node_3の= xmlDoc.Element( 'タスク1')
ノードNode_4 = xmlDoc.Element( 'Task2の')
root.extend([node_3の、ノードNode_4])#extend

xmlDoc.dump(ルート)#プレビュー
tree.write( 'b.text'、エンコード= 'UTF-8')#は保存、またはb.html又はb.xmlをb.textに保存することができます

 

xml.etree.ElementTreeは、ノードを作成使用している場合**、ないインデント、非常に美しいので、使用してxml.domノードが作成され、保存されたセーブ

xml.dom minidomインポート
ファイル= minidom.Document()#xmlファイルオブジェクトを作成
node_1の= file.createElement( 'ルート') #は、 ノードの作成
file.appendChild(Node_1の)#それ根作ります

node_2 = file.createElement( 'メープル') # 2つ目のノードを作成
node_2.setAttribute( 'テスト名'、 'AAA ')#1 セットATTRIBを

node_3の= file.createElement( '仕事') #第3のノードを作成
node_3.setAttribute( 'ジョブ名'、 '仕事 ')# 設定Attribに
node_3.appendChild(file.createTextNode( '100'))#セットテキストを

node_2.appendChild(node_3の)
node_1.appendChild(node_2)

:Fとして( 'b.xml'、 'W')オープンと
file.writexml(F、インデント= ''、addindent = '\ T'、NEWL = '\ n'は、符号化= 'UTF-8')

インデント:文字に充填する前に各タグ
の各タグの後にパディング文字:NEWLを
addindent:各ノードのインデント文字

おすすめ

転載: www.cnblogs.com/xia-dong/p/11736713.html