从lxml获取内部xml

时间:2019-01-05 04:55:30

标签: python xml lxml

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

  content ='  Rathaus '
 

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

从lxml导入etree的
 
内容='  Rathaus '
根= etree.fromstring(内容)
打印(root.text)
 

这将导致无。我在做什么错了?

etree .__ version__ ='4.2.5'

我不确定以下原因: root.xpath(“ string()”),但 root.xpath(“ // text()”)仅返回一个空列表。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

“ Rathaus”字符串是tail元素的itdMapItemList属性的值。范例:

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

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


root.xpath("string()")返回根节点及其后代的字符串值的串联,在这种情况下,它的确是“ Rathaus”。

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


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

root.xpath("//text()")返回所有文本节点的列表,在这种情况下为['Rathaus']

如果输入XML更改为

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

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