Pythonの「lxml.etree」というライブラリについてご紹介します。
import lxml.etree
「lxml.etree」は、XML形式のデータをPythonで手軽に扱えるようにするためのライブラリです。XML形式のデータがカンタンに扱えるさまざまな機能を備えています。
私は、jQueryと同等の機能を提供する「PyQuery」というライブラリを使うのに必要だったので入れました。
以下、etreeの基礎的な使い方を見ていきます。
01 インスタンスの作成
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の場合はコンパイラの設定などがややこしいので、有志で作られているインストーラを使いました。Windowsはこちらが手早いかと思います。
etreeのほかにも、lxmlにはさまざまな便利なサブモジュールがあるようですので、詳しくは公式ドキュメントをごらんください。