从 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']
我有以下字符串,它是更大的 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']