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

wlm*_*rer 7 xml xpath

我有一个这样的节点:

<meta name="og:description" content="Here's the content" />
Run Code Online (Sandbox Code Playgroud)

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

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

Dim*_*hev 13

用途:

//meta[@*[local-name() = 'description']]
Run Code Online (Sandbox Code Playgroud)

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

根据定义,标准XPath函数local-name()生成从中剥离名称空间前缀(如果有)的节点的名称.

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


Ric*_*der 5

使用XPath 2你可以做到:

 /meta[ends-with(@name, 'description')]
Run Code Online (Sandbox Code Playgroud)

对于XPath 1,我们需要:

 /meta['description' = substring(@name, string-length(@name) - string-length('description') + 1)]
Run Code Online (Sandbox Code Playgroud)