🔥
pythonでxmlの解析を0から学んでいく
introduction
やっぱりブラックボックス化がお得意なpythonさん。今回はあんまり体系化されていないxmlモジュールの使い方についてお話する。今回もこの記事の目的は研究にxml解析が必要になったので、その理解を深めるため。参考サイトは以下のものになる。
xml内のnodeを取得する操作
xmlの解析
xmlの構造解析
import xml.etree.ElementTree as ET
tree = ET.parse('country.xml')
root = tree.getroot()
まずはxmlの構造を読み取り、それぞれのnodeとして扱えるようにする事が必要になる。これがparseめそっどである。実際には上のように使うことが出来る。また、nodeのtopにあるxmlをgetrootメソッドによって取得することが出来る。
子要素の取得
子要素の取得
node.find('person') #子要素内のタグを操作して、その最初を取得する
node.find('person/items') #子要素の更に下層をpathのように取得することが出来る
node.find('person/items/item')
このように、findメソッドを用いることで簡単に子要素を取得することが出来る。
全ての子要素を取得する
全ての子要素を取得
plants=root.findall('scene/plant')
for plant in plants:
print(plant.attrib)
findallはこのように配列でnodeを取得する事ができる。
xml-nodeの内容を取得する
タグの名称の取得
タグ
node.tag
タグの名称を取得するには、nodeに対してtagメソッドをもちいる。
属性の取得
属性
node.attrib
属性を取得するには、nodeに対してattribメソッドを用いる。
テキストの取得
テキスト
node.text
テキストを取得するには、nodeに対してtextメソッドを用いる。
また、下層の特定のnodeテキストを取得するなら以下のように、node.findtext()を用いる。
テキスト
root.findtext('person/name')
for文で子要素の内容を全て取得する
for文
for child in root:
print(f"{child.tag} {child.attrib}")
このようにfor文を用いることによって、全ての子要素の内容を取得することが出来る。
最後に
iterメソッドとかはあるけれど、基本的にはこの記事の内容で事足りる(イテレータとかまだよく理解してないだけ)。まぁもしももっと知りたいって人がいるのなら、以下の参考サイトがとてもいい。
Discussion