XMLの基礎と使用例
- XMLとは?
XMLは、データを構造化して保存・輸送するための言語です。HTMLと同様に、XMLもタグを使用しますが、HTMLがデータの表示を主に目的としているのに対し、XMLはデータの構造化を目的としています。 - XMLの構文
XMLはタグでデータを囲みます。タグは、開始タグ<tag>
と終了タグ</tag>
で構成され、タグの間にはデータが入ります。属性は開始タグに追加できます。
<person age="30">
<name>John Doe</name>
<city>New York</city>
</person>
この例では、personはageという属性を持ち、nameタグとcityタグを子として持っています。
3. XMLの例
<employees>
<employee id="1">
<name>John Doe</name>
<position>Software Engineer</position>
</employee>
<employee id="2">
<name>Jane Doe</name>
<position>Data Scientist</position>
</employee>
</employees>
このXML文書は、2人の従業員のリストを表しています。
PythonでXMLをパースするには、xml.etree.ElementTree
モジュールを使用できます。
import xml.etree.ElementTree as ET
# XML形式の文字列を定義
xml_string = '''
<employees>
<employee id="1">
<name>John Doe</name>
<position>Software Engineer</position>
</employee>
<employee id="2">
<name>Jane Doe</name>
<position>Data Scientist</position>
</employee>
</employees>
'''
# 文字列からXMLのElementTreeオブジェクトを生成
root = ET.fromstring(xml_string)
# 各<employee>要素を走査
for employee in root.findall('employee'):
# id属性を取得
id = employee.get('id')
# <name>と<position>の子要素のテキストを取得
name = employee.find('name').text
position = employee.find('position').text
# 結果をプリントアウト
print(f"ID: {id}, Name: {name}, Position: {position}")
'''
root = ET.fromstring(xml_string)
for employee in root.findall('employee'):
id = employee.get('id')
name = employee.find('name').text
position = employee.find('position').text
print(f"ID: {id}, Name: {name}, Position: {position}")
4. PythonでのXMLの生成
PythonでXMLを生成するにも、xml.etree.ElementTree
モジュールを使用できます。
import xml.etree.ElementTree as ET
root = ET.Element("employees")
employee1 = ET.SubElement(root, "employee", id="1")
name1 = ET.SubElement(employee1, "name")
name1.text = "John Doe"
position1 = ET.SubElement(employee1, "position")
position1.text = "Software Engineer"
employee2 = ET.SubElement(root, "employee", id="2")
name2 = ET.SubElement(employee2, "name")
name2.text = "Jane Doe"
position2 = ET.SubElement(employee2, "position")
position2.text = "Data Scientist"
tree = ET.ElementTree(root)
tree.write("employees.xml")
このコードはemployees.xmlファイルを生成し、その内容は3. XMLの例のセクションにあるXML文書と同じになります。
HTMLとXMLの違い
HTMLとXMLは両方ともマークアップ言語ですが、主な違いは以下の通りです。
-
目的:
- HTML:ウェブページの構造を記述し、ブラウザで表示するための言語です。
- XML:データを構造化し、記述するための言語です。主にデータの保存や輸送に使用されます。
-
構文の厳密さ:
- HTML:比較的寛容で、エラーに対して許容範囲が広いです。閉じタグの省略など、いくつかの緩い記述が許されます。
- XML:非常に厳密で、すべてのエラーが許されません。開始タグと終了タグは必ず一致しなければなりませんし、正確にネストされていなければなりません。
-
タグの定義:
-
HTML:予め定義されたタグセット(例:
<p>
,<div>
,<span>
など)を使用します。 - XML:ユーザーがタグを自由に定義できます。これにより、XMLは非常に柔軟性があります。
-
HTML:予め定義されたタグセット(例:
-
メタデータ:
- HTML:メタデータ(データのデータ)の使用が限定的です。
- XML:メタデータの使用が一般的であり、XML文書自体がメタデータを含むことができます。
-
表示:
- HTML:主にウェブブラウジングのコンテキストで、データの表示を目的としています。
- XML:データの輸送や構造化を目的とし、表示は主な目的ではありません。
これらの違いにより、HTMLはウェブページのマークアップに特化し、XMLはデータ交換のためのマークアップ言語として設計されています。
6. まとめ
XMLは、データの構造化と輸送に使われる言語で、Pythonではxml.etree.ElementTree
モジュールを使ってパースや生成ができます。