Функции метода доступа к данным — string (XQuery)

Применимо к:SQL Server

Возвращает значение $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 преобразуется в строку без экранирования специальных символов.

  • Реализация inthis, fn:string() без аргумента может использоваться только в контексте предиката, зависяющего от контекста. Точнее, она может использоваться только внутри квадратных скобок ([ ]).

Примеры

В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа 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...    

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

В следующем примере экземпляр 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   

См. также

Функции XQuery для типа данных XML