XMLの属性の値とテキストを入れ替える in Python + lxml
後で使いそうなのでメモ。
文の添削をXMLで表したファイルがあるとする。
<document> 私<correct value='は'>を</correct>元気です。 </document>
ここでは「私『を』元気です。」を「私『は』元気です。」に訂正している。
ここで、修正前の文と、修正後の文を得たいとする。
ここでは、 Python の xml/html 処理ライブラリである lxml を使う。
(Windows での lxml のインストール → http://d.hatena.ne.jp/factal/20120705#1341473250)
修正前の文は lxml.html.text_content() を使えば得られる。
>>> import lxml.html >>> root = lxml.html.fromstring(open('sample.xml', 'rb').read()) >>> root.text_content() >>> print root.text_content() 私を元気です。
修正後の文は xpath で要素を指定し、テキストと属性の値を入れ替えることで得られる。
>>> elements = root.xpath('//correct') >>> for e in elements: ... e.text = e.attrib['value'] ... >>> print root.text_content() 私は元気です。
参考: Python(lxml)でhtmlを処理する まとめ - Gentleちゃれんじ Tips
多分、日本語のページで一番 lxml に詳しいサイト。
タイトルは「htmlを処理する」になってるけど、 xml にもそのまま使える。