Fonction string (XQuery)

 

S’applique à : SQL Server

Retourne la valeur de $arg représenté sous forme de chaîne.

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

$arg
Nœud ou valeur atomique.

  • Si $arg est la séquence vide, la chaîne de longueur nulle est retournée.

  • Si $arg est un nœud, la fonction retourne la valeur de chaîne du nœud qui est obtenue à l’aide de l’accesseur de la valeur de chaîne. Celui-ci est défini dans les spécifications W3C XQuery 1.0 et XPath 2.0 Data Model.

  • Si $arg est une valeur atomique, la fonction retourne la même chaîne est retournée par l’expression de cast en tant que xs : String, $arg, sauf si spécifié autrement.

  • Si le type de $arg est xs : anyURI, l’URI est converti en une chaîne sans séquence d’échappement de caractères spéciaux.

  • Dans cette implémentation, fn :String() sans argument peut uniquement être utilisé dans le contexte d’un prédicat dépendant du contexte. Autrement dit, elle ne peut être utilisée qu'à l'intérieur de crochets ([ ]).

Cette rubrique fournit des exemples de XQuery relatifs à des instances XML stockés dans différentes xml colonnes de type dans la base de données AdventureWorks.

A. Utilisation de la fonction string

La requête suivante extrait le nœud d'élément enfant <Features> de l'élément <ProductDescription>.

SELECT CatalogDescription.query('  
declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
 /PD:ProductDescription/PD:Features  
')  
FROM Production.ProductModel  
WHERE ProductModelID=19  

Voici le résultat partiel :

<PD:Features xmlns:PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">  
   These are the product highlights.   
   <p1:Warranty xmlns:p1="http://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 vous spécifiez le string() (fonction), vous recevez la valeur de chaîne du nœud spécifié.

SELECT CatalogDescription.query('  
declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
 string(/PD:ProductDescription[1]/PD:Features[1])  
')  
FROM Production.ProductModel  
WHERE ProductModelID=19  

Le résultat partiel est le suivant.

These are the product highlights.   
3 yearsparts and labor...    

B. Utilisation de la fonction string sur différents nœuds

Dans l'exemple suivant, une instance XML est affectée à une variable de type xml. Les requêtes sont spécifiées pour illustrer le résultat de l’application string() à différents nœuds.

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 requête suivante extrait la valeur de chaîne du nœud de document. Cette valeur est le fruit de la concaténation de la valeur de chaîne de tous ses nœuds de texte descendants.

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

Voici le résultat obtenu :

This is a comment 10  
just text  
 20  

La requête suivante essaie d'extraire la valeur de chaîne d'un nœud d'instruction de traitement. Le résultat est une séquence vide, car il ne contient pas de nœud de texte.

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

La requête suivante extrait la valeur de chaîne du nœud de commentaire et renvoie le nœud de texte.

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

Voici le résultat obtenu :

This is a comment   

Fonctions XQuery sur le Type de données xml

Ajouts de la communauté

Afficher: