子要素をもつ XML のテキストを lxml で消したい
以下のような XML があったとする。
<document> <deleteme>この要素をタグごと消したい。<wac/> あああああ </deleteme> </document>
ここで、
>>> xml = open('sample.xml', 'rb').read() >>> root = lxml.html.fromstring(xml) >>> elements = root.xpath('//deleteme') >>> for e in elements: ... del e ... >>> print root.text_content() この要素をタグごと消したい。 あああああ >>> for e in elements: ... e.text = '' ... >>> print root.text_content() あああああ >>> root = lxml.html.fromstring(xml) >>> elements = root.xpath('//deleteme') >>> for e in elements: ... e.drop_tree() ... >>> print root.text_content() >>>
drop_tree() を使えばいいらしい。
参考:
Gentleちゃれんじ Tips -lxmlでhtmlを処理する-
追記:
どうやら text は子要素のタグまでとかしか取ってくれないらしい。
<document> <outer>in outer 1<inner>in inner</inner>in outer 2</outer> </document>
>>> xml = open('sample.xml', 'rb').read() >>> root = lxml.html.fromstring(xml) >>> print e.text_content() in outer 1in innerin outer 2 >>> elements = root.xpath('//outer') >>> for e in elements: ... print e.text ... in outer 1 >>> for e in elements: ... print e.text_content() ... in outer 1in innerin outer 2
うーん…