Функция local-name (XQuery)
Возвращает локальную часть имени $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-данных в базе данных 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
Б. Использование локального имени без аргумента в предикате
Следующий запрос обращается к столбцу «Instructions» типа 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>.