节点上的函数 - local-name

适用范围:SQL Server

返回作为零长度字符串或词法形式的$argxs:string名称的xs:NCName本地部分。 如果未提供参数,则默认值为上下文节点。

语法

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

参数

$arg

检索其本地名称部件的节点名称。

注解

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

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

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

示例

本文针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例提供了 XQuery 示例。

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

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

DECLARE @x AS 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. 在谓词中使用不带参数的 local-name

以下查询针对 ProductModel 表的“指令”列(类型化 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;

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