2025年09月09日/ 浏览 7
在XPath 2.0及后续版本中,QName()
函数作为处理XML命名空间的核心工具,其类型处理机制直接关系到XML文档的精确查询。与常规字符串处理函数不同,QName()
需要同时应对URI引用、本地部分和前缀映射三种数据类型,这种多维度的类型处理使其成为XPath类型系统中颇具特色的函数。
xpath
QName($paramURI as xs:string?, $paramLocal as xs:string) as xs:QName
该函数显式声明接收两个xs:string
类型参数,最终返回xs:QName
类型值。这种输入输出类型的严格定义,体现了XPath对类型安全的重视。
xs:string?
表示可空字符串xpath
QName((), "local") --> 合法调用
xs:string
非空类型xpath
QName("http://example.com", ()) --> 类型错误
xs:QName
作为特殊原子类型,包含三个隐含属性:
1. 命名空间URI(可能为空)
2. 本地名称(必填)
3. 前缀信息(运行时绑定)
当输入参数存在类型不匹配时,XPath处理器会尝试自动类型转换:
xpath
QName(123, 456) --> 隐式转换为QName("123", "456")
xpath
let $ns := "http://schemas.example"
let $local := "Element"
return /QName($ns, $local)
xpath
//*[node-name() = QName("urn:books", "book")]
xpath
if ($node/@type instance of xs:QName)
then process-qname($node)
else process-string($node)
xpath
QName(namespace-uri-for-prefix("xs", $node), "string")
xpath
QName("urn:a", "x") = QName("urn:a", "x") --> true
QName((), "x") eq QName("", "x") --> false
xpath
(: XPath 1.0兼容模式 :)
let $qname := concat("{", $nsuri, "}", $local)
return $qname