概要
下のようなXML文書の場合,単純にテキストを抽出することはできない.
ダメな例
node = etree.fromstring("""
<content>
Text outside tag <div>Text <em>inside</em> tag</div>
</content>
""")
print(node.text)
>> Text outside tag # content直下のテキストしか取得できない.
あらかじめXMLの構造が決まってたら普通に要素ごとにfind()
すればいいけど,文書内にランダムにタグが出現する場合は困る.
解決策
これ.
https://stackoverflow.com/questions/4624062/get-all-text-inside-a-tag-in-lxml
ただし,リンク先の一番上のstringify_children()
は正確ではないので,node.itertext()
を使いましょう.
OKな例
node = etree.fromstring("""
<content>
Text outside tag <div>Text <em>inside</em> tag</div>
</content>
""")
print(''.join(node.itertext()))
>> Text outside tag Text inside tag
おまけ
両端にスペースが入ってる場合を考慮して,
OKな例2
print(''.join(node.itertext()).strip())
>> Text outside tag Text inside tag
とする方が安全.