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


Функция 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 в базе данных База данных AdventureWorks2008R2. Обзор каждого из этих столбцов см. в разделе Представление типов данных XML в базе данных AdventureWorks2008R2.

А. Использование строковой функции

Следующий запрос получает дочерний узел элемента <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 years parts 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])');

Результат:

This is a comment

См. также

Справочник