XPath的local-name-from-QName()函数是专门用于从带命名空间的限定名(QName)中提取本地名称的内置函数,在处理包含命名空间的XML文档时非常实用。当XML元素或属性带有命名空间前缀时,完整的限定名由命名空间前缀、冒号和本地名称组成,这个函数就能帮我们快速拿到冒号后面的本地名称部分。

函数基本语法
local-name-from-QName()函数的语法格式非常简单,仅接收一个参数:
local-name-from-QName($qname as xs:QName?) as xs:NCName?
参数说明:
- $qname:必填参数,类型为xs:QName,也就是需要处理的限定名,参数可以为空序列。
- 返回值:类型为xs:NCName,也就是提取出来的本地名称,如果传入的参数为空序列,那么返回值也为空序列。
使用前提条件
要使用这个函数,首先需要保证传入的参数是合法的xs:QName类型,而不是直接传入字符串形式的限定名。如果拿到的是字符串形式的限定名,需要先通过QName()函数将其转换为xs:QName类型,否则函数会返回错误。
实际使用示例
假设我们有如下一段带命名空间的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:ns="http://www.example.org/ns">
<ns:user>
<ns:name>张三</ns:name>
<ns:age>25</ns:age>
</ns:user>
</root>
如果我们想提取ns:user这个限定名的本地名称,正确的XPath查询写法如下:
local-name-from-QName(QName("http://www.example.org/ns", "ns:user"))
这段查询的执行结果是user,也就是我们想要的本地名称部分。
如果直接在XPath中处理文档里的元素,也可以结合node-name()函数先获取元素的限定名,再提取本地名称,示例如下:
local-name-from-QName(node-name(/root/ns:user))
这段查询同样会返回user作为结果。
注意事项
- 如果传入的参数不是xs:QName类型,比如直接传入字符串"ns:user",XPath处理器会抛出类型不匹配的错误。
- 如果限定名本身没有命名空间前缀,比如就是普通的本地名称,那么函数会直接返回这个名称本身,不会做任何额外处理。
- 不同XPath版本对这个函数的支持略有差异,XPath 2.0及以上版本才内置了这个函数,XPath 1.0不支持该函数的使用。
常见使用场景
这个函数在以下场景中非常实用:
- 处理多命名空间的XML文档时,需要忽略命名空间前缀,仅根据本地名称匹配元素或属性。
- 需要统计XML文档中相同本地名称但不同命名空间的元素数量。
- 生成XML文档的处理报告时,需要展示元素的本地名称而非完整的限定名。
XPathlocal-name-from-QNameXML函数使用修改时间:2026-06-27 00:42:19