2012-04-21 73 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()')))