4

インライン要素を含むいくつかのXMLを解析する必要があります。たとえば、XMLの外観は次のようになります。

<section> Fubar, I'm so fubar, fubar and even more <fref bar="baz">fubare</fref>. And yet more fubar. </section>

この構造を繰り返し処理するfor elem in list(parent): ...と、frefにしかアクセスできなくなります。ここでfrefを処理すると、テキストは実際の要素ではないため、周囲のテキストはもちろん失われます。

この問題に適切に対処する方法を知っている人はいますか?

4

1 に答える 1

4

以下に、を使用してこれを実現する方法を示しますlxml

>>> from lxml.etree import fromstring
>>> tree = fromstring('''<section> Fubar, I'm so fubar, fubar and even more <fref bar="baz">fubare</fref>. And yet more fubar. </section>''')
>>> elem = tree.xpath('/section/fref')[0]
>>> elem.text
'fubare'
>>> elem.tail
'. And yet more fubar. '
>>> elem.getparent().text
" Fubar, I'm so fubar, fubar and even more "

lxml.etree チュートリアルから:

テキストのみを読み取りたい場合、つまり中間タグを使用しない場合は、すべてのテキスト属性とテール属性を正しい順序で再帰的に連結する必要があります。ここでも、tostring()関数が助けになりますが、今回はメソッドキーワードを使用します。

>>> from lxml.etree import tostring
>>> tostring(html, method="text")
" Fubar, I'm so fubar, fubar and even more fubare. And yet more fubar. "

これを行うXPathの方法もあります。これは、リンクされたページで説明されています。

于 2012-04-16T20:27:28.923 に答える