如何使用lxml获取根元素的文本?

时间:2012-04-21 11:42:31

标签: python lxml

我完全不知道为什么lxml .text会给我一个子标签的文本但是为root标签。

some_tag = etree.fromstring('<some_tag class="abc"><strong>Hello</strong> World</some_tag>')

some_tag.find("strong")
Out[195]: <Element strong at 0x7427d00>

some_tag.find("strong").text
Out[196]: 'Hello'

some_tag
Out[197]: <Element some_tag at 0x7bee508>

some_tag.text

some_tag.find("strong").text返回<strong>标记之间的文字。

我希望some_tag.text返回<some_tag> ... </some_tag>

之间的所有内容

预期:

<strong>Hello</strong> World

相反,它什么都不返回。

5 个答案:

答案 0 :(得分:8)

from lxml import etree

XML = '<some_tag class="abc"><strong>Hello</strong> World</some_tag>'

some_tag = etree.fromstring(XML)

for element in some_tag:
    print element.tag, element.text, element.tail

输出:

   
strong Hello  World

有关.text.tail属性的信息,请参阅:

要准确获得您期望的结果,请使用

print etree.tostring(some_tag.find("strong"))

输出:

<strong>Hello</strong> World

答案 1 :(得分:1)

你会在这里找到遗失的文字

>>> some_tag.find("strong").tail
' World'

查看http://lxml.de/tutorial.html并搜索“尾巴”。

答案 2 :(得分:0)

我不确定您的问题,但解析时有两个主要解决方案:

DOMParser:取决于语言,它是node.getNodeValue();

SAXParser:取决于语言,但在例如java中是在fonction:characters(...)

我没有时间在谷歌搜索但在python中,我知道MiniDOM(一个DOM解析器): http://www.blog.pythonlibrary.org/2010/11/12/python-parsing-xml-with-minidom/

我希望我的回答可以帮助你。

答案 3 :(得分:0)

这有帮助吗?

comp = [ etree.tostring(e) for e in some_tag]
print ''.join(comp[0])

编辑:感谢@mzjin让我走上正轨

答案 4 :(得分:0)

您必须使用内置的lxml方法来检索标记之间的所有文本。

  from lxml import etree
  xml='''<some_tag class="abc"><strong>Hello</strong> World</some_tag>'''
  tree = etree.fromstring(xml)
  print(''.join(tree.xpath('//text()')))