2012-04-21 19 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:関連リンク言語によっては、それはnode.getNodeValueです();

のSAXParser:関連リンク言語によっては、しかし、例えばJavaでfonctionである:文字(...)

私はグーグルではなく、Pythonで検索する時間がありません、私はMiniDOMを知っている(DOMパーサー): http://www.blog.pythonlibrary.org/2010/11/12/python-parsing-xml-with-minidom/

私の答えがあなたを助けることを望みます。

+0

私はミニドムを試しましたが、それはどちらもうまくいかないようです。 'some_tag_md = minidom。parseString( 'こんにちは世界') ' ' some_tag_md.nodeValue' :/ –

1

あなたは不足しているテキストにここ

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

http://lxml.de/tutorial.htmlを見て、「テール」を検索して見つけることができます。

0

これは役に立ちますか?

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

EDITED:ありがとう@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")) 

出力:あなたが間のすべてのテキストを取得するために作り付けのlxmlのメソッドを使用する必要が

<strong>Hello</strong> World 
0

タグ。

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