Python / ElementTree:解析与周围文本相关的内联元素?

时间:2012-04-16 19:59:29

标签: python text elementtree

我需要解析一些包含内联元素的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,那么周围的文本当然会丢失,因为文本不是真正的元素。

有人知道如何妥善解决这个问题吗?

1 个答案:

答案 0 :(得分: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 tutorial

  

如果您只想阅读文字,即没有任何中间标签,   你必须递归地连接所有的text和tail属性   正确的订单。再次,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方法可以做到这一点,它在链接页面中进行了描述。