Python XML ファイル – 読み方、書き方、解析方法

XMLとは何ですか?

XML は eXtensible Markup Language の略です。 小規模から中量のデータを保存および転送するように設計されており、構造化情報の共有に広く使用されています。

Python XML文書を解析および変更することができます。XML文書を解析するには、XML文書全体をメモリに保持する必要があります。このチュートリアルでは、XML minidomクラスを Python XML ファイルを読み込んで解析します。

minidom を使用して XML を解析する方法

解析するサンプル XML ファイルを作成しました。

ステップ 1) サンプル XML ファイルを作成する

ファイル内には、名前、姓、自宅、専門分野(SQL、 Python、テストとビジネス)

minidom を使用して XML を解析する方法

ステップ 2) 解析関数を使用して XML ファイルをロードおよび解析します

ドキュメントを解析したら、 「ノード名」 ドキュメントのルートと「firstchild タグ名」。 タグ名とノード名は、XML ファイルの標準プロパティです。

minidom を使用して XML を解析する

  • xml.dom.minidom モジュールをインポートし、解析する必要があるファイル (myxml.xml) を宣言します。
  • このファイルには、姓、名、自宅、専門知識など、従業員に関する基本情報が含まれています。
  • XML Minidom の parse 関数を使用して、XML ファイルをロードして解析します。
  • 変数 doc があり、doc は解析関数の結果を取得します。
  • ファイルからノード名と子のタグ名を出力したいので、print 関数で宣言します。
  • コードを実行します。XML ファイルからノード名 (#document) と XML ファイルから最初の子タグ名 (employee) が出力されます。

注意:

ノード名と子のタグ名は、XML dom の標準名またはプロパティです。

ステップ 3) XML ドキュメントから XML タグのリストを呼び出し、出力します。

次に、XML文書からXMLタグのリストを呼び出して印刷することもできます。ここではSQLなどのスキルセットを印刷しました。 Python, テスト そしてビジネス。

minidom を使用して XML を解析する

  • 変数の専門知識を宣言します。そこから従業員が持つすべての専門知識名を抽出します。
  • 「getElementsByTagName」という dom 標準関数を使用します。
  • これにより、スキルという名前のすべての要素が取得されます
  • 各スキルタグに対するループを宣言します。
  • コードを実行すると、XNUMX つのスキルのリストが表示されます

XMLノードの書き方

「createElement」関数を使用して新しい属性を作成し、この新しい属性またはタグを既存の XML タグに追加できます。 XML ファイルに新しいタグ「BigData」を追加しました。

  1. 新しい属性 (BigData) を既存の XML タグに追加するコードを作成する必要があります。
  2. 次に、既存の XML タグに新しい属性を追加した XML タグを出力する必要があります。

XMLノードの書き込み

  • 新しい XML を追加してドキュメントに追加するには、コード「doc.create elements」を使用します。
  • このコードは、新しい属性「ビッグデータ」の新しいスキルタグを作成します。
  • このスキル タグをドキュメントの最初の子 (従業員) に追加します。
  • コードを実行すると、新しいタグ「ビッグデータ」が他の専門知識のリストとともに表示されます。

XML パーサーの例

Python 2例

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
#Write a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3例

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # Write a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

ElementTree を使用して XML を解析する方法

ElementTree は XML を操作するための API です。 ElementTree を使用すると、XML ファイルを簡単に処理できます。

サンプル データとして次の XML ドキュメントを使用します。

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

ElementTree を使用して XML を読み取る:

最初に xml.etree.ElementTree モジュールをインポートする必要があります。

import xml.etree.ElementTree as ET

次に、ルート要素を取得しましょう。

root = tree.getroot()

以下は上記のXMLデータを読み取るための完全なコードです。

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

出力:

Expertise Data:
SQL
Python

まとめ

Python 一度に 1 行ずつ解析するのではなく、XML ドキュメント全体を一度に解析できます。XML ドキュメントを解析するには、ドキュメント全体をメモリ内に保持する必要があります。

  • XMLドキュメントを解析するには
  • xml.dom.minidomをインポートする
  • 関数「parse」を使用してドキュメントを解析します ( doc=xml.dom.minidom.parse (ファイル名);
  • コード (=doc.getElementsByTagName( "name of xml tags") を使用して、XML ドキュメントから XML タグのリストを呼び出します。
  • XML ドキュメントに新しい属性を作成して追加するには
  • 関数「createElement」を使用する