Freigeben über


string-Funktion (XQuery)

Gibt den Wert von $arg als Zeichenfolge dargestellt zurück.

Syntax

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

Argumente

  • $arg
    Ist ein Knoten oder ein atomarer Wert.

Hinweise

  • Wenn $arg die leere Sequenz ist, wird eine Zeichenfolge mit der Länge null zurückgegeben.

  • Wenn $arg ein Knoten ist, gibt die Funktion den Zeichenfolgenwert des Knotens zurück, der mithilfe des Zeichenfolgenwert-Accessors abgerufen wird. Dies wurde in der W3C XQuery 1.0- und XPath 2.0-Datenmodellspezifikation definiert.

  • Wenn $arg ein atomarer Wert ist, gibt die Funktion (wenn nichts anderes angegeben wird) die gleiche Zeichenfolge zurück, die von dem Ausdruck zurückgegeben wird, der in xs:string, $arg umgewandelt wird.

  • Wenn der Typ von $argxs:anyURI lautet, wird der URI in eine Zeichenfolge umgewandelt, ohne Sonderzeichen umzuwandeln.

  • In dieser Implementierung kann fn:string() ohne Argument nur im Kontext eines kontextabhängigen Prädikats verwendet werden. Insbesondere kann die Funktion nur innerhalb von Klammern ([ ]) verwendet werden.

Beispiele:

Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom xml-Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-Datenbank.

A. Verwenden der Zeichenfolgenfunktion

Die folgende Abfrage ruft den untergeordneten <Features>-Elementknoten des <ProductDescription>-Elements ab.

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

Dies ist das Teilergebnis:

<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">

Dies sind die Produkthighlights.

<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">

<p1:WarrantyPeriod>3 Jahre</p1:WarrantyPeriod>

<p1:Description>Teile und Arbeit</p1:Description>

</p1:Warranty>

...

</PD:Features>

Wenn Sie die string()-Funktion angeben, erhalten Sie den Zeichenfolgenwert des angegebenen Knotens.

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;

Dies ist das Teilergebnis.

Dies sind die Produkthighlights.

3 Jahre Teile und Arbeit...

A. Verwenden der Zeichenfolgenfunktion für verschiedene Knoten

Im folgenden Beispiel wird eine XML-Instanz einer Variablen des Typs xml zugewiesen. Abfragen werden angegeben, um das Ergebnis des Anwendens von string() auf verschiedene Knoten zu zeigen.

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

Die folgende Abfrage ruft den Zeichenfolgenwert des Dokumentknotens ab. Dieser Wert wird generiert, indem die Zeichenfolgenwerte aller seiner Nachfolgertextknoten verkettet werden.

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

Dies ist das Ergebnis:

Dies ist ein Kommentar 10

nur Text

20

Die folgende Abfrage versucht, den Zeichenfolgenwert eines Verarbeitungsanweisungsknotens abzurufen. Das Ergebnis ist eine leere Sequenz, weil kein Textknoten enthalten ist.

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

Die folgende Abfrage ruft den Zeichenfolgenwert des Kommentarknotens ab und gibt den Textknoten zurück.

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

Dies ist das Ergebnis:

Dies ist ein Kommentar