数据取值函数 - string (XQuery)

适用于:SQL Server

返回表示为字符串 $arg 的值。

语法

  
fn:string() as xs:string  
fn:string($arg as item()?) as xs:string  

参数

$arg
一个节点或原子值。

备注

  • 如果 $arg 为空序列,则返回零长度字符串。

  • 如果 $arg 是节点,则函数返回使用 string-value 访问器获取的节点的字符串值。 W3C XQuery 1.0 和 XPath 2.0 数据模型规范中对此进行了定义。

  • 如果 $arg 是原子值,则函数将返回由表达式强制转换为 xs:string 返回的相同字符串, $arg,除非另有说明。

  • 如果 $arg 的类型为 xs:anyURI,则 URI 将转换为字符串,而不转义特殊字符。

  • 在此实现中,没有参数的 fn:string () 只能在依赖于上下文的谓词的上下文中使用。 特别要指出的是,它只能在方括号 ([ ]) 内使用。

示例

本主题提供针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例的 XQuery 示例。

A. 使用 string 函数

以下查询检索 元素的<>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. 对各种节点使用 string 函数

在下面的示例中,一个 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   

另请参阅

针对 xml 数据类型的 XQuery 函数