string (función de XQuery)

Devuelve el valor de $arg representado como una cadena.

Sintaxis

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

Argumentos

  • $arg
    Es un nodo o un valor atómico.

Comentarios

  • Si $arg es la secuencia vacía, se devuelve la cadena de longitud cero.

  • Si $arg es un nodo, la función devuelve el valor de cadena del nodo que se obtiene utilizando el descriptor de acceso del valor de cadena. Esto está definido en la especificación del modelo de datos de W3C XQuery 1.0 y XPath 2.0.

  • Si $arg es un valor atómico, la función devuelve la misma cadena que devuelve la expresión asignada como xs:string, $arg, excepto cuando se indica algo distinto.

  • Si el tipo de $arg es xs:anyURI, el URI se convierte en una cadena sin escape de caracteres especiales.

  • En esta implementación, sólo se puede usar fn:string() sin un argumento en el contexto de un predicado dependiente del contexto. Específicamente, sólo se puede usar entre corchetes ([ ]).

Ejemplos

En este tema se ofrecen ejemplos de XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks2008R2. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks2008R2.

A. Usar la función string

La consulta siguiente recupera el nodo de elemento secundario <Features> del elemento <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

Este es el resultado parcial:

<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>

Si especifica la función string(), recibe el valor de cadena del nodo especificado.

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;

Este es el resultado parcial.

These are the product highlights.

3 years parts and labor...

B. Usar la función string en varios nodos

En el ejemplo siguiente, se asigna una instancia XML a una variable de tipo xml. Se especifican consultas para mostrar el resultado de aplicar string() a varios nodos.

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>
';

La consulta siguiente recupera el valor de cadena del nodo de documento. Este valor se forma concatenando el valor de cadena de todos sus nodos de texto descendientes.

select @x.query('string(/)');

Este es el resultado:

This is a comment 10

just text

20

La consulta siguiente intenta recuperar el valor de cadena de un nodo de instrucción de procesamiento. El resultado es una secuencia vacía, porque no contiene un nodo de texto.

select @x.query('string(/processing-instruction()[1])');

La consulta siguiente recupera el valor de cadena del nodo de comentario y devuelve el nodo de texto.

select @x.query('string(/comment()[1])');

Este es el resultado:

This is a comment