local-name 函数 (XQuery)

以一个 xs:string 返回 $arg 名称的本地部分,它要么是长度为零的字符串,要么采用 xs:NCName 的词汇形式。如果未提供参数,默认值为上下文节点。

语法

fn:local-name() as xs:string
fn:local-name($arg as node()?) as xs:string

参数

  • $arg
    将检索其本地名称部分的节点名称。

备注

  • 在 SQL Server 中,不带参数的 fn:local-name() 只能用于与上下文相关的谓词的上下文中。特别要指出的是,它只能在方括号 ([ ]) 内使用。

  • 如果提供了参数而参数是空序列,则该函数返回长度为零的字符串。

  • 如果目标节点没有名称(因为它是文档节点、注释或文本节点),该函数返回长度为零的字符串。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks2008R2 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅 AdventureWorks2008R2 数据库中的 xml 数据类型表示形式

A. 检索特定节点的本地名称

下面的查询是针对非类型化的 XML 实例指定的。查询表达式 local-name(/ROOT[1]) 检索指定节点的本地名称部分。

declare @x xml;
set @x='<ROOT><a>111</a></ROOT>';
SELECT @x.query('local-name(/ROOT[1])')
-- result = ROOT;

以下查询是针对 ProductModel 表的 Instructions 列(一个类型化的 xml 列)指定的。表达式 local-name(/AWMI:root[1]/AWMI:Location[1]) 返回指定节点的本地名称 Location。

SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
     local-name(/AWMI:root[1]/AWMI:Location[1])') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
-- result = Location;

B. 在谓词中使用不带参数的本地名称

以下查询是针对 ProductModel 表的 Instructions 列(一个类型化的 xml 列)指定的。表达式返回其 QName 的本地名称部分为“Location”的 <root> 元素的所有元素子级。在谓词中指定了 local-name() 函数,它没有参数。该函数使用上下文节点。

SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
  /AWMI:root//*[local-name() = "Location"]') as Result
FROM Production.ProductModel
WHERE ProductModelID=7;

该查询返回 <root> 元素的所有 <Location> 元素子级。