我需要解析一些包含内联元素的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,那么周围的文本当然会丢失,因为文本不是真正的元素。
有人知道如何妥善解决这个问题吗?
答案 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方法可以做到这一点,它在链接页面中进行了描述。