如何使用XML标题中未列出的具有命名空间属性的所有元素查找

问题描述 投票:0回答:1

我的xml看起来像这样source xml

我想定位所有标签<langSet xml:lang="en">。如您所见,根目录中的“ xmlns”属性中未列出“ xml”。我正在使用xml.etree.ElementTreeparsegetroot初始化下面的root的值。

因此,此调用工作正常,但返回所有语言:

root.findall('.//langSet')

并且此调用是我所需要的,但它返回空列表:

root.findall('.//langSet[@{xml}:lang="en"]')

谢谢您的帮助。

python xml elementtree
1个回答
0
投票

“ xml”名称空间前缀在XML文档和XPath中都是预定义的。所以你可以简单地做

.//langSet[@xml:lang='en']

此外,XPath具有允许的lang()函数

.//langSet[lang('en')]

这不会做完全相同的事情:(a)它也考虑祖先元素上的@xml:lang属性,并且(b)它不仅会匹配xml:lang="en",而且还会匹配更具体的语言代码,例如[ C0]。

偶然地,“ uk”不是公认的语言代码,因此不应在xml:lang="en-GB"属性中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.