按属性名称选择xml节点,忽略该属性的名称空间

时间:2011-05-23 05:57:51

标签: xml xpath

我有一个这样的节点:

<meta name="og:description" content="Here's the content" />

如果名称是“description”,我希望能够选择此元素,无论它是否在命名空间中。我需要能够选择元标记,如果它的名称是“og:description”,“description”,“blah:description”等。

我已经看到了xpath的资源,它展示了如何在命名空间中进行选择,但不管命名空间如何。

2 个答案:

答案 0 :(得分:13)

使用

//meta[@*[local-name() = 'description']]

这将选择XML文档中具有local-name meta属性的所有"description"元素。

根据定义,标准XPath函数 local-name() 会生成从中删除命名空间前缀(如果有)的节点的名称。

请注意:如果XML文档的结构是静态已知的,请始终避免使用//伪运算符。通常使用//会导致执行缓慢。

答案 1 :(得分:5)

使用XPath 2可以:

 /meta[ends-with(@name, 'description')]

对于XPath 1,我们需要:

 /meta['description' = substring(@name, string-length(@name) - string-length('description') + 1)]