Python XML ファイル – 読み方、書き方、解析方法
⚡ スマートサマリー
Python XML処理では、組み込みのminidomおよびElementTreeモジュールを使用してXMLドキュメントの読み書きと解析を行うことができます。minidomクラスはファイルをDOMとしてメモリにロードし、ElementTreeはより高速で、より Pythonic tree API。
以下のセクションでは、XML ファイルの解析、書き込み、および読み込みについて説明します。 Python.
XMLとは何ですか?
XML は eXtensible Markup Language の略です。 小規模から中量のデータを保存および転送するように設計されており、構造化情報の共有に広く使用されています。
Python XML ドキュメントを解析および変更することができます。XML ドキュメントを解析するには、XML ドキュメント全体をメモリに保持する必要があります。このチュートリアルでは、XML minidom クラスを次のように使用する方法を見ていきます。 Python XML ファイルを読み込んで解析します。
minidom を使用して XML を解析する方法
解析するサンプル XML ファイルを作成しました。
ステップ 1) サンプル XML ファイルを作成する
ファイル内には、名前、姓、自宅、専門分野(SQL、 Python(テストおよびビジネス)。
ステップ 2) 解析関数を使用して XML ファイルをロードおよび解析します
ドキュメントの解析が完了したら、ドキュメントのルートの「ノード名」と「最初の子タグ名」を出力します。タグ名とノード名は、XMLファイルの標準的なプロパティです。
- xml.dom.minidomモジュールをインポートし、解析対象のファイル(myxml.xml)を宣言します。
- このファイルには、姓、名、自宅、専門知識など、従業員に関する基本情報が含まれています。
- XML Minidom の parse 関数を使用して、XML ファイルをロードして解析します。
- 変数docがあり、docにはparse関数の結果が格納されます。
- ファイルからノード名と子タグ名を出力したいので、print関数内で宣言します。
- コードを実行します。XML ファイルからノード名 (#document) と XML ファイルから最初の子タグ名 (employee) が出力されます。
お願い: ノード名と子タグ名は、XML DOM の標準的な名前またはプロパティです。
ステップ3)XMLドキュメントからXMLタグのリストを呼び出し、それを印刷する
次に、XML ドキュメントから XML タグのリストを呼び出して出力することもできます。ここでは、SQL などのスキルセットを出力しました。 Python, テスト そしてビジネス。
- これから使用する変数「expertification」を宣言します。trac従業員が持つ専門知識の名前をすべて挙げる
- 「getElementsByTagName」という dom 標準関数を使用します。
- これにより、スキルという名前のすべての要素が取得されます
- 各スキルタグに対してループを宣言します
- コードを実行すると、4つのスキルの一覧が表示されます。
XMLノードの書き方
「createElement」関数を使用して新しい属性を作成し、この新しい属性またはタグを既存の XML タグに追加できます。 XML ファイルに新しいタグ「BigData」を追加しました。
- 既存の XML タグに新しい属性 (BigData) を追加するには、コードを記述する必要があります。
- 次に、新しい属性が既存のXMLタグに追加されたXMLタグを出力する必要があります。
- 新しいXMLタグを追加してドキュメントに追加するには、「doc.createElement」というコードを使用します。
- このコードは、新しい属性「ビッグデータ」に対応する新しいスキルタグを作成します。
- このスキルタグをドキュメントの最初の子要素(従業員)に追加してください。
- コードを実行すると、他の専門分野のリストに新しいタグ「BigData」が表示されます。
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





