从 lxml 获取内部 xml

Get inner xml from lxml

我有以下字符串,它是更大的 XML 文档的一部分:

content = '<odvNameElem stopID="9001002"><itdMapItemList/>Rathaus</odvNameElem>'

我想访问 Rathaus。我目前的方法是用 lxml 解析它并尝试访问元素 'odvNameElem':

的文本
from lxml import etree
content = '<odvNameElem stopID="9001002"><itdMapItemList/>Rathaus</odvNameElem>'
root = etree.fromstring(content)
print(root.text)

然而,这会导致 None。我做错了什么?

etree.__version__ = '4.2.5'

我不确定以下内容为何有效: root.xpath("string()")root.xpath("//text()") 只有 returns 一个空列表。有人可以解释一下吗?

"Rathaus" 字符串是 itdMapItemList 元素的 tail 属性 的值。示例:

root.xpath("itdMapItemList")[0].tail
root.find("itdMapItemList").tail

参见https://lxml.de/tutorial.html#elements-contain-text


root.xpath("string()") returns 根节点及其后代的字符串值的串联,在本例中确实是 "Rathaus"。

https://www.w3.org/TR/xpath-10/#function-string


root.xpath("//test") 没有意义(没有 test 元素)。您是说 root.xpath("//text()") 吗?

root.xpath("//text()") returns 所有文本节点的列表,在本例中为 ['Rathaus'].

如果输入XML改为

<odvNameElem stopID="9001002">ABC<itdMapItemList/>Rathaus</odvNameElem>

那么结果就是['ABC', 'Rathaus']