XPath的prefix-from-QName()函数是用于处理限定名QName的内置函数,它的核心作用是提取QName中的命名空间前缀部分,是XML文档解析过程中处理带命名空间元素和属性的常用工具。

函数基本定义
prefix-from-QName()函数属于XPath 2.0及以上版本的内置函数,它的语法格式非常简单,只需要接收一个QName类型的参数,函数会返回该QName对应的命名空间前缀字符串,如果传入的QName没有前缀,则返回空序列。
参数与返回值规则
该函数的参数和返回值有明确的规则:
- 参数必须是QName类型,不能是普通的字符串,否则会触发类型错误
- 如果QName包含命名空间前缀,比如
ns:book,函数返回前缀字符串ns - 如果QName没有前缀,比如
book,函数返回空序列 - 如果传入的参数是空序列,函数也会返回空序列
使用示例
首先准备一个带命名空间的XML示例文档:
<?xml version="1.0" encoding="UTF-8"?>
<ns:root xmlns:ns="http://example.org/ns" xmlns:app="http://app.org">
<ns:book id="1">XML入门</ns:book>
<app:user name="test">张三</app:user>
<title>无前缀元素</title>
</ns:root>
接下来编写XPath表达式调用prefix-from-QName()函数,查看不同场景的返回结果:
<!-- 提取ns:book的前缀,返回ns -->
prefix-from-QName(QName("http://example.org/ns", "ns:book"))
<!-- 提取app:user的前缀,返回app -->
prefix-from-QName(QName("http://app.org", "app:user"))
<!-- 提取无前缀的title的前缀,返回空序列 -->
prefix-from-QName(QName("", "title"))
<!-- 传入空序列,返回空序列 -->
prefix-from-QName(())
注意事项
使用这个函数时需要注意几个常见问题:
- 该函数仅支持XPath 2.0及以上版本,XPath 1.0环境中无法使用
- 参数必须是合法的QName,不能直接传入字符串形式的限定名,需要通过QName()函数构造QName类型参数
- 返回的前缀是字符串类型,如果没有前缀则返回空序列,不是空字符串,使用时需要做空值判断
与其他QName函数的区别
XPath中还有两个和QName相关的常用函数,需要和prefix-from-QName()区分开:
| 函数名称 | 作用 | 返回值示例 |
|---|---|---|
| prefix-from-QName() | 获取QName的命名空间前缀 | ns:book 返回 ns |
| local-name-from-QName() | 获取QName的本地名称部分 | ns:book 返回 book |
| namespace-uri-from-QName() | 获取QName的命名空间URI | ns:book 返回 http://example.org/ns |
通过上面的对比可以清楚看到,prefix-from-QName()函数专门负责提取QName中的前缀部分,和其他两个函数的作用有明确区分,使用时不要混淆。
XPathprefix-from-QNameXMLQName函数用法修改时间:2026-07-13 00:24:21