次の方法で共有


ノードの関数 - local-name

適用対象:SQL Server

さ 0 の文字列になるか、xs:NCName の字句形式になる xs:string として、$argの名前のローカル部分を返します。 引数が指定されていない場合、既定値はコンテキスト ノードです。

構文

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

引数

$arg
local-name 部分が取得されるノード名。

解説

  • SQL Serverでは、引数を指定しない fn:local-name() は、コンテキスト依存述語のコンテキストでのみ使用できます。 具体的には、角かっこ ([ ]) 内でのみ使用できます。

  • 引数が指定され、空のシーケンスである場合、関数は長さ 0 の文字列を返します。

  • ターゲット ノードに名前がない場合は、ドキュメント ノード、コメント、またはテキスト ノードであるため、関数は長さ 0 の文字列を返します。

このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納されている XML インスタンスに対する XQuery の例を示します。

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. 述語で引数を指定せずに local-name を使用する

次のクエリは、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  

クエリは、 要素のすべての要素の <Location> 子を <root> 返します。

参照

ノード上の関数
namespace-uri 関数 (XQuery)