Compartir a través de


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, solo se puede usar fn:string() sin un argumento en el contexto de un predicado dependiente del contexto. Específicamente, solo se puede usar entre corchetes ([ ]).

Ejemplos

Este tema proporciona ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.

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

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

El resultado parcial es el siguiente.

These are the product highlights. 
3 yearsparts 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(/)')

El resultado es el siguiente:

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])')

El resultado es el siguiente:

This is a comment 

Vea también

Referencia

Funciones de XQuery con el tipo de datos xml