以下顯示如何使用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
tutorial:
如果你想讀的只有文字,即沒有任何中間的標籤, 你必須遞歸串聯所有文字和尾部 正確的順序屬性。同樣情況下,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的方式來做到這一點,在鏈接頁面的描述。
你想達到什麼目的?你想剝離標籤並保留所有文字嗎? – MattH 2012-04-16 20:15:03
我需要真正解析這件事。這有點像HTMLs a-tag,它可以在線替換,而不會中斷文本。我想我需要在同一時間迭代子元素*和*文本「元素」並保留它們的順序。所以,「Fubar,我是如此......」被處理,然後是fref-tag,然後是文本。 – dom0 2012-04-16 20:17:13