2012-04-21 49 views
4

我完全难住为什么lxml .text会给我一个儿童标签的文本,但为根标签。如何使用lxml获取根元素的文本?

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 

相反,它没有返回。

回答

0

我不知道理解你的问题,但你必须在解析2级主要的解决方案:

的DOMParser:取决于langage,它的node.getNodeValue();

的SAXParser:取决于langage,但在Java的例子是在fonction:字符(...)

我还没有对谷歌,但在Python搜索的时候,我知道minidom命名(一个DOM解析器): http://www.blog.pythonlibrary.org/2010/11/12/python-parsing-xml-with-minidom/

我希望我的回答能帮助你。

+0

我试过了minidom,但似乎也没有工作。 'some_tag_md = minidom。parseString( '你好世界')' 'some_tag_md.nodeValue' :/ – 2012-04-21 12:43:02

0

这有帮助吗?

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

编辑:感谢@mzjin为把我在正确的轨道上

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 
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()')))