Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » XML in der Datenbank » XML in der Datenbank benutzen » SQL/XML verwenden, um Abfrageergebnisse als XML zu erhalten

 

Die XMLGEN-Funktion verwenden

Die XMLGEN-Funktion wird verwendet, um einen XML-Wert zu generieren, der auf einem XQuery-Konstruktor basiert.

Das von der folgenden Abfrage generierte XML enthält Informationen über die Kundenbestellungen in der SQL Anywhere-Beispieldatenbank. Es verwendet die folgenden variablen Referenzen:

  • {$ID}   Generiert den Inhalt für das <ID>-Element, wobei Werte aus der ID-Spalte in der SalesOrders-Tabelle verwendet werden.

  • {$OrderDate}   Generiert den Inhalt für das <date>-Element, wobei Werte aus der OrderDate-Spalte in der SalesOrders-Tabelle verwendet werden.

  • {$Customers}   Generiert den Inhalt für das <customer>-Element anhand der CompanyName-Spalte in der Customers-Tabelle.

SELECT XMLGEN ( '<order>
              <ID>{$ID}</ID>
              <date>{$OrderDate}</date>
              <customer>{$Customers}</customer>
              </order>',
              SalesOrders.ID,
              SalesOrders.OrderDate,
              Customers.CompanyName AS Customers 
              ) AS order_info      
FROM SalesOrders JOIN Customers
ON Customers.ID = SalesOrders.CustomerID
ORDER BY SalesOrders.CustomerID;

Diese Abfrage erzeugt das folgende Ergebnis:

order_info
<order>
 <ID>2001</ID>
 <date>2000-03-16</date>
 <customer>The Power Group</customer>
</order>
<order>
 <ID>2005</ID>
 <date>2001-03-26</date>
 <customer>The Power Group</customer>
</order>
<order>
 <ID>2125</ID>
 <date>2001-06-24</date>
 <customer>The Power Group</customer>
</order>
<order>
 <ID>2206</ID>
 <date>2000-04-16</date>
 <customer>The Power Group</customer>
</order>
...
Attribute generieren

Wenn die ID-Nummer der Bestellung als ein Attribut des <order>-Elements erscheinen soll, schreiben Sie die folgende Abfrage (beachten Sie, dass die variable Referenz in doppelten Anführungszeichen steht, weil sie einen Attributwert angibt):

SELECT XMLGEN ( '<order ID="{$ID}">
                 <date>{$OrderDate}</date>
                 <customer>{$Customers}</customer>
                 </order>',
                SalesOrders.ID,
                SalesOrders.OrderDate,
                Customers.CompanyName AS Customers
              ) AS order_info 
FROM SalesOrders JOIN Customers
ON Customers.ID = SalesOrders.CustomerID
ORDER BY SalesOrders.OrderDate;

Diese Abfrage erzeugt das folgende Ergebnis:

order_info
<order ID="2131">
 <date>2000-01-02</date>
 <customer>BoSox Club</customer>
</order>
<order ID="2065">
 <date>2000-01-03</date>
 <customer>Bloomfield&apos;s</customer>
</order>
<order ID="2126">
 <date>2000-01-03</date>
 <customer>Leisure Time</customer>
</order>
<order ID="2127">
 <date>2000-01-06</date>
 <customer>Creative Customs Inc.</customer>
</order>
...

In beiden Ergebnismengen wird der Kundenname "Bloomfield's" als Bloomfield&apos;s angeführt, weil der Apostroph in XML ein Sonderzeichen ist und das <customer>-Element nicht von einem XML-Typ generiert wurde.

Weitere Hinweise darüber, wie Sie unzulässige Zeichen in XMLGEN in Anführungszeichen setzen, finden Sie unter Ungültige Namen und SQL/XML.

Header-Daten für XML-Dokumente angeben

Die FOR XML-Klausel und die von SQL Anywhere unterstützten SQL/XML-Funktionen fügen keine Informationen über die Versionsdeklaration in die XML-Dokumente ein, die sie generieren. Sie können die XMLGEN-Funktion verwenden, um Header-Daten zu generieren.

SELECT XMLGEN( '<?xml version="1.0" 
                encoding="ISO-8859-1" ?>
                <r>{$x}</r>',
                (SELECT GivenName, Surname 
      FROM Customers FOR XML RAW) AS x );

Diese Abfrage bewirkt das folgende Ergebnis:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<r>
 <row GivenName="Michaels" Surname="Devlin"/>
 <row GivenName="Beth" Surname="Reiser"/>
 <row GivenName="Erin" Surname="Niedringhaus"/>
 <row GivenName="Meghan" Surname="Mason"/>
 ...
</r>

Weitere Hinweise zur XMLGEN-Funktion finden Sie unter XMLGEN-Funktion [Zeichenfolge].