XMLについて調べてみた



# XMLの基礎と使用例
1. XMLとは？
XMLは、データを構造化して保存・輸送するための言語です。HTMLと同様に、XMLもタグを使用しますが、HTMLがデータの表示を主に目的としているのに対し、XMLはデータの構造化を目的としています。
2. XMLの構文
XMLはタグでデータを囲みます。タグは、開始タグ`<tag>`と終了タグ`</tag>`で構成され、タグの間にはデータが入ります。属性は開始タグに追加できます。

```xml
<person age="30">
    <name>John Doe</name>
    <city>New York</city>
</person>
```
この例では、personはageという属性を持ち、nameタグとcityタグを子として持っています。
3. XMLの例

```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`モジュールを使用できます。

```python
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`モジュールを使用できます。

```python
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は両方ともマークアップ言語ですが、主な違いは以下の通りです。

1. **目的**：
   - **HTML**：ウェブページの構造を記述し、ブラウザで表示するための言語です。
   - **XML**：データを構造化し、記述するための言語です。主にデータの保存や輸送に使用されます。

2. **構文の厳密さ**：
   - **HTML**：比較的寛容で、エラーに対して許容範囲が広いです。閉じタグの省略など、いくつかの緩い記述が許されます。
   - **XML**：非常に厳密で、すべてのエラーが許されません。開始タグと終了タグは必ず一致しなければなりませんし、正確にネストされていなければなりません。

3. **タグの定義**：
   - **HTML**：予め定義されたタグセット（例： `<p>`, `<div>`, `<span>` など）を使用します。
   - **XML**：ユーザーがタグを自由に定義できます。これにより、XMLは非常に柔軟性があります。

4. **メタデータ**：
   - **HTML**：メタデータ（データのデータ）の使用が限定的です。
   - **XML**：メタデータの使用が一般的であり、XML文書自体がメタデータを含むことができます。

5. **表示**：
   - **HTML**：主にウェブブラウジングのコンテキストで、データの表示を目的としています。
   - **XML**：データの輸送や構造化を目的とし、表示は主な目的ではありません。

これらの違いにより、HTMLはウェブページのマークアップに特化し、XMLはデータ交換のためのマークアップ言語として設計されています。


### 6. まとめ
XMLは、データの構造化と輸送に使われる言語で、Pythonでは`xml.etree.ElementTree`モジュールを使ってパースや生成ができます。