簡體   English   中英

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

[英]How to get text for a root element using 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

相反,它什么都不返回。

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

你會在這里找到丟失的文字

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

查看http://lxml.de/tutorial.html並搜索“tail”。

我不確定你理解你的問題,但解析時你有兩個主要的解決方案:

DOMParser:取決於語言,它是node.getNodeValue();

SAXParser:取決於語言,但在例如java中是在fonction:characters(...)

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

我希望我的回答可以幫到你。

這有幫助嗎?

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

編輯:謝謝@mzjin讓我走上正軌

您必須使用內置的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()')))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM