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.
Notas
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
Este tema proporciona ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks. Para obtener información general de cada una de estas columnas, consulte Representación de tipo de datos xml en 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