7

なぜlxmlが子.textタグのテキストをルートタグのテキストに与えるのか、私は完全に困惑しています。

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

代わりに、何も返しません。

4

5 に答える 5

9
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
于 2012-04-21T17:58:23.603 に答える
1

You'll find the missing text here

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

Look at http://lxml.de/tutorial.html and search for "tail".

于 2012-04-21T12:19:40.707 に答える
0

これは役に立ちますか?

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

編集済み:@mzjin、正しい軌道に乗せてくれてありがとう

于 2012-04-21T13:40:47.190 に答える
0

あなたの質問を理解できるかどうかはわかりませんが、解析には2つの主な解決策があります:

DOMParser : 言語によって異なりますが、それは node.getNodeValue(); です。

SAXParser : 言語によって異なりますが、たとえばJavaでは次のようになります: characters(...)

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

私の答えがお役に立てば幸いです。

于 2012-04-21T11:59:49.967 に答える
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()')))
于 2017-07-10T10:59:31.603 に答える