Функция string (XQuery)
Возвращает значение $arg, представленное в виде строки.
Синтаксис
fn:string() as xs:string
fn:string($arg as item()?) as xs:string
Аргументы
- $arg
Узел или атомарное значение.
Замечания
- Если $arg является пустой последовательностью, возвращается строка нулевой длины.
- Если $arg является узлом, функция возвращает строковое значение узла, которое извлекается с использованием метода доступа к строковым значениям. Это определено в спецификации W3C XQuery 1.0 и XPath 2.0 Data Model.
- Если $arg является атомарным значением, функция возвращает ту же строку, которая возвращается выражением, приведенным к xs:string, $arg, за исключением особо отмеченных случаев.
- Если $arg имеет тип xs:anyURI, URI-адрес преобразуется в строку без экранирования специальных символов.
- В этой реализации fn:string() без аргумента может быть использована только в контексте контекстно-зависимого предиката. Она может использоваться только в квадратных скобках ([ ]).
Примеры
В этом разделе приведены примеры запросов XQuery к экземплярам XML, которые хранятся в различных столбцах типа xml в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов xml-данных в базе данных AdventureWorks.
А. Использование строковой функции
Следующим запросом извлекается дочерний элемент <Features
> элемента <ProductDescription
>.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Features
')
FROM Production.ProductModel
WHERE ProductModelID=19
Промежуточный результат:
<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
These are the product highlights.
<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
...
</PD:Features>
Если указана функция string(), возвращается строковое значение указанного узла.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
string(/PD:ProductDescription[1]/PD:Features[1])
')
FROM Production.ProductModel
WHERE ProductModelID=19
Частичный результат.
These are the product highlights.
3 yearsparts and labor...
Б. Использование строковой функции в различных узлах
В следующем примере экземпляр XML назначается переменной типа xml. Запросы указаны, чтобы проиллюстрировать результат применения функции string() к различным узлам.
Следующим запросом извлекается строковое значение узла документов. Это значение формируется сцеплением строкового значения всех текстовых узлов, являющихся его потомками.
declare @x xml
set @x = '<?xml version="1.0" encoding="UTF-8" ?>
<!-- This is a comment -->
<root>
<a>10</a>
just text
<b attr="x">20</b>
</root>
'
Результат:
select @x.query('string(/)')
Следующий запрос пытается получить строковое значение узла инструкции по обработке. Результатом будет пустая последовательность, так как он не содержит текстового узла.
This is a comment 10
just text
20
Следующим запросом извлекается строковое значение узла комментариев и возвращается текстовый узел.
select @x.query('string(/processing-instruction()[1])')
Результат:
select @x.query('string(/comment()[1])')
См. также
Справочник
Применение функций XQuery к типу данных XML