Поделиться через


Функции с узлами — local-name

Область применения: SQL Server

Возвращает локальную часть имени $arg в виде строки xs:string, которая будет либо строкой нулевой длины, либо будет иметь лексическую форму xs:NCName. Если аргумент не указан, по умолчанию используется узел контекста.

Синтаксис

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

Аргументы

$arg
Имя узла, локальную часть имени которого нужно получить.

Замечания

  • В SQL Server fn:local-name() без аргумента можно использовать только в контексте предиката, зависяющего от контекста. Точнее, ее использование возможно только внутри квадратных скобок ([ ]).

  • Если аргумент указан и представляет собой пустую последовательность, функция возвращает строку нулевой длины.

  • Если целевой узел не имеет имени (например, узел документа, комментарий или текстовый узел), функция возвращает строку нулевой длины.

Примеры

В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в базе данных AdventureWorks.

А. Получение локального имени конкретного узла

Следующий запрос обращается к нетипизированному экземпляру XML. Выражение запроса local-name(/ROOT[1]) получает локальную часть имени указанного узла.

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

Следующий запрос обращается к столбцу «Instructions» типа xml таблицы ProductModel. Выражение 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. Использование локального имени без аргумента в предикате

Следующий запрос указан в столбце "Инструкции", типизированном xml-столбце таблицы ProductModel. Выражение возвращает все дочерние элементы элемента элемента, локальная часть которого <root> является частью QName "Location". Функция 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)