Pythonの lxml.etree
というライブラリについてご紹介します。
import lxml.etree
lxml.etree
は XML 形式のデータを Python で手軽に扱えるようにするライブラリです。 XML 形式のデータがカンタンに扱えるさまざまな機能を備えています。
私は jQuery と同等の機能を提供する PyQuery
というライブラリを使うのに必要だったので入れました。
以下 lxml.etree
の基礎的な使い方を見ていきます。
01 インスタンスの作成
lxml.etree
において主役となるのは Element
と呼ばれるクラスです。
from lxml import etree
root = etree.Element("root")
print type(root).__name__ # _Elementと表示
print root.tag
Element()
に文字列を渡せば、その名前の Element
インスタンスを作ることができます。
その要素のタグには tag
というアトリビュートでアクセスできます。
02 子要素の追加
child1 = etree.SubElement(root, "child1")
root.append(etree.Element("child2"))
root.insert(0, etree.Element("child3"))
print etree.tostring(root, pretty_print=True)
# 次のとおり表示
# <root>
# <child3/>
# <child1/>
# <child2/>
# </root>
子要素を追加するには SubElement()
append()
insert()
といったメソッドを使います。 SubElement
はインスタンス生成時に親を特定して作るもので、 append()
と insert()
は、親要素のメソッドとして呼び出し、子要素を引数に受け取る形で使います。
append()
と insert()
は list
のメソッドと同じ使い方で使うことができます。
特定の要素を子要素も含めて整形して表示するには etree.tostring()
を使います。
03 テキストとコメント要素
child4 = etree.SubElement(root, "child4")
child4.text = "this is text"
root.append(etree.Comment("comment part"))
print etree.tostring(root, pretty_print=True)
# 次のとおり表示
# <root>
# <child3/>
# <child1/>
# <child2/>
# <child4>this is text</child4>
# <!--comment part-->
# </root>
要素内のテキストには text
アトリビュートを使ってアクセスすることができます。
コメント要素を表すクラスとして Comment
があります。こちらも Element
と同じく他の要素の子要素とすることができます。
04 子要素へのアクセス
print root[0].tag #
print len(root) # 5
print root.index(root[2]) # 2
子要素にはインデックスを使ってアクセスできます。
children = list(root)
for c in children:
print c.tag
# 次のとおり表示
# child3
# child1
# child2
# child
Element
を関数 list()
に渡すとその子要素のリストを作ることができます。
05 属性値へのアクセス
root.set("hello", "world")
root.set("dog", "taro")
a = root.attrib
print a # {'hello': 'world', 'dog': 'taro'}
print a.get("dog") # taro
属性値には set()
get()
でアクセスできます。また、属性値のセットを辞書として取得するにはattribアトリビュートを使います。
06 要素間の移動
print root[1].getnext().tag # child2
print root[1].getprevious().tag # child3
print root == root[1].getparent() # True
要素間の移動をするためのメソッドとして getnext()
getprevious()
getparent()
などが用意されています。
以上です。
インストール
ソースからインストールする場合は pip や GitHub で インストールするようです。
私は主に Windows で使っているのですが、 Windows の場合はコンパイラの設定などがややこしいので、有志で作られているインストーラを使わせていただきました。
lxml
には etree
のほかにも、さまざまな便利なサブモジュールがあります。興味のある方は公式ドキュメントをご覧ください。