lxml.etree で XML の基本的なことを少し触ってみる

# 目的

[Windows 10 + Excel2016_x86 VBA で XML の基本的なことを少し触ってみる](https://qiita.com/tabizou/items/10eb832352a6b31888c7)
で使用したXMLファイルをPythonで基本的な操作を実行してみる。

## 対象となるXMLデータ(addr2.xml)

```xml
<?xml version="1.0" encoding="UTF-8" ?>
<results>
    <query>池尻4-35-25 </query>
    <geodetic>wgs1984</geodetic>
    <iConf>4</iConf>
    <converted>池尻4-35-</converted>
    <candidate>
        <address>東京都/世田谷区/池尻/四丁目/３５番</address>
        <longitude>139.673965</longitude>
        <latitude>35.654259</latitude>
        <iLvl>7</iLvl>
    </candidate>
    <candidate>
        <address>兵庫県/伊丹市/池尻/四丁目/３５番地</address>
        <longitude>135.381805</longitude>
        <latitude>34.784988</latitude>
        <iLvl>7</iLvl>
    </candidate>
</results>
```

## Pythonのサンプルコード
基本的な機能を確認してみる

```python
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
# coding:utf-8
# https://lxml.de/tutorial.html

from lxml import etree

tree = etree.parse('./addr2.xml')
root = tree.getroot()

# 以下の２行は同一内容を返す
etree.dump(root)
print(etree.tostring(root, pretty_print=True, encoding='unicode'))

# 以下のコードで表示される内容
# query 池尻4-35-25 
# geodetic wgs1984
# iConf 4
# converted 池尻4-35-
# candidate
# address 東京都/世田谷区/池尻/四丁目/３５番
# longitude 139.673965
# latitude 35.654259
# iLvl 7
# candidate
# address 兵庫県/伊丹市/池尻/四丁目/３５番地
# longitude 135.381805
# latitude 34.784988
# iLvl 7

print(root[0].tag, root[0].text)
print(root[1].tag, root[1].text)
print(root[2].tag, root[2].text)
print(root[3].tag, root[3].text)
print("")
print(root[4].tag)
print(root[4][0].tag, root[4][0].text)
print(root[4][1].tag, root[4][1].text)
print(root[4][2].tag, root[4][2].text)
print(root[4][3].tag, root[4][3].text)
print("")
print(root[5].tag)
print(root[5][0].tag, root[5][0].text)
print(root[5][1].tag, root[5][1].text)
print(root[5][2].tag, root[5][2].text)
print(root[5][3].tag, root[5][3].text)

# 上記とほぼ同じ内容
children = list(root)
for elem in children:
    print(elem.tag, elem.text)
    for items in elem:
        print(items.tag, items.text)

# 以下のコードで表示される内容
# address 東京都/世田谷区/池尻/四丁目/３５番
# longitude 139.673965
# latitude 35.654259
# iLvl 7
# address 兵庫県/伊丹市/池尻/四丁目/３５番地
# longitude 135.381805
# latitude 34.784988
# iLvl 7

tree = root.findall('candidate')
for node in tree:
    print("")
    print(node[0].tag, node[0].text)
    print(node[1].tag, node[1].text)
    print(node[2].tag, node[2].text)
    print(node[3].tag, node[3].text)

tree = root.iter('candidate')
for node in tree:
    print("")
    for items in node:
        print(items.tag, items.text)

tree = root.xpath('candidate')
# tree = root.xpath('./candidate')
# tree = root.xpath('///candidate')
for node in tree:
    print("")
    print(node[0].tag, node[0].text)
    print(node[1].tag, node[1].text)
    print(node[2].tag, node[2].text)
    print(node[3].tag, node[3].text)
```
# 参考にしたのは以下のサイト
[Excel の WEBSERVICE 関数でジオコーディング](https://qiita.com/frogcat/items/585c7de901c31cf30760)
[xml.etree.ElementTree --- ElementTree XML API](https://docs.python.org/ja/3/library/xml.etree.elementtree.html)
[Windows 10 + Excel2016_x86 VBA で XML の基本的なことを少し触ってみる](https://qiita.com/tabizou/items/10eb832352a6b31888c7)
[xml.etree.ElementTree で XML の基本的なことを少し触ってみる](https://qiita.com/tabizou/items/54ec8c6a538f3d3b12af)