Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Analyse/Parsen)

PARSE_XML

Interpretiert eine Eingabezeichenfolge als XML-Dokument und erzeugt einen OBJECT-Wert. Wenn die Eingabe NULL ist, lautet die Ausgabe NULL.

Siehe auch:

CHECK_XML

Syntax

PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )
Copy
PARSE_XML( STR => <string_containing_xml>
  [ , DISABLE_AUTO_CONVERT => <disable_auto_convert> ] )
Copy

Argumente

Erforderlich:

string_containing_xml . OR . STR => string_containing_xml

Dieser Ausdruck sollte einen VARCHAR-Wert ergeben. Der VARCHAR-Wert sollte gültigen XML-Code enthalten.

Optional:

disable_auto_convert . OR . DISABLE_AUTO_CONVERT => disable_auto_convert

Boolescher Ausdruck, der angibt, ob die Funktion numerische und boolesche Werte in string_containing_xml in Snowflake-Datentypen konvertieren soll oder nicht. (Weitere Informationen zu dieser Konvertierung finden Sie unten unter Nutzungshinweise.)

  • Wenn Sie nicht möchten, dass die Funktion diese Werte konvertiert, geben Sie TRUE an. Dies hat eine ähnliche Wirkung wie der Parameter DISABLE_AUTO_CONVERT in CREATE FILE FORMAT.

  • Wenn Sie möchten, dass die Funktion diese Werte konvertiert, geben Sie FALSE an, oder lassen Sie dieses Argument weg.

Standard: FALSE

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist OBJECT. Das OBJECT enthält eine interne Darstellung der XML.

Nutzungshinweise

  • Sie müssen alle Argumente entweder über den Namen oder über die Position angeben. Sie können nicht einige der Argumente über den Namen und andere Argumente über die Position angeben.

    Wenn Sie ein Argument über den Namen angeben, können Sie den Argumentnamen nicht in doppelten Anführungszeichen einschließen.

  • Der Inhalt jedes Elements in XML-Dokumenten ist Text. PARSE_XML versucht, einige XML-Daten von Text in native (Snowflake SQL) Referenz der SQL-Datentypen zu konvertieren.

    • NUMERIC und BOOLEAN:

      PARSE_XML versucht, offensichtlich numerische und boolesche Werte so in die native Darstellung zu konvertieren, dass sich bei erneuter Ausgabe dieser Werte textuell identische Ergebnisse ergeben. Beispiel: Beim Analysieren von Dezimalzahlen versucht PARSE_XML, die Genauigkeit der Darstellung zu erhalten, indem 123,45 als NUMBER(5,2) und nicht als DOUBLE behandelt wird. Allerdings:

      • Zahlen in wissenschaftlicher Notation (z. B. 1,2345e+02) oder Zahlen, die aufgrund von Bereichs- oder Skalierungsbegrenzungen nicht als Festkomma-Dezimalzahlen gespeichert werden können, werden als DOUBLE gespeichert.

      • Wenn der Inhalt eines XML-Elements eine Zahl mit Nachkommastellen ist, kann PARSE_XML nachstehende Nullen abschneiden.

      Wenn Sie nicht möchten, dass die Funktion diese Konvertierung vornimmt, übergeben Sie TRUE für das Argument disable_auto_convert.

    • TIMESTAMP, DATE, TIME, BINARY:

      Da Werte wie TIMESTAMP, DATE, TIME oder BINARY in XML nicht darstellt werden können, müssen sie in XML als Zeichenfolgen dargestellt werden. PARSE_XML erkennt diese Werte nicht automatisch. Sie werden als Zeichenfolge beibehalten, sodass der Benutzer die Werte bei Bedarf von Zeichenfolgen in native SQL-Datentypen konvertieren muss.

  • XML-Attribute sind eine ungeordnete Sammlung von Name/Wert-Paaren. Die PARSE_XML-Funktion behält nicht unbedingt die Reihenfolge bei. Wenn Sie beispielsweise Text in XML und zurück in Text konvertieren, wird möglicherweise eine Zeichenfolge angezeigt, die die ursprünglichen Informationen in einer anderen Reihenfolge enthält.

  • Möglicherweise werden beim Konvertieren einer Zeichenfolge in XML Änderungen bezüglich des Leerraums zwischen Elementen angezeigt.

Beispiele

Im folgenden Beispiel wird die Funktion PARSE_XML verwendet, um eine XML-Zeichenfolge in einen OBJECT-Wert zu konvertieren, der in eine OBJECT-Spalte eingefügt werden kann:

CREATE TABLE xtab (v OBJECT);

INSERT INTO xtab SELECT PARSE_XML(column1) AS v
  FROM VALUES ('<a/>'), ('<a attr="123">text</a>'), ('<a><b>X</b><b>Y</b></a>');

SELECT * FROM xtab;
Copy
+-------------------------+
|           V             |
+-------------------------+
| <a></a>                 |
| <a attr="123">text</a>  |
| <a><b>X</b><b>Y</b></a> |
+-------------------------+

Das folgende Beispiel veranschaulicht die Unterschiede zwischen Verwendung und Deaktivierung der Konvertierung von numerischen Werten. In diesem Beispiel ist die Konvertierung deaktiviert, sodass die Funktion eine Zahl in wissenschaftlicher Notation als DOUBLE interpretiert.

SELECT PARSE_XML('<test>22257e111</test>'), PARSE_XML('<test>22257e111</test>', TRUE);
Copy
+-------------------------------------+-------------------------------------------+
| PARSE_XML('<TEST>22257E111</TEST>') | PARSE_XML('<TEST>22257E111</TEST>', TRUE) |
|-------------------------------------+-------------------------------------------|
| <test>2.225700000000000e+115</test> | <test>22257e111</test>                    |
+-------------------------------------+-------------------------------------------+

Das folgende Beispiel zeigt, wie die Argumente für die Funktion über den Namen angegeben werden:

SELECT PARSE_XML(STR => '<test>22257e111</test>', DISABLE_AUTO_CONVERT => TRUE);
Copy
+--------------------------------------------------------------------------+
| PARSE_XML(STR => '<TEST>22257E111</TEST>', DISABLE_AUTO_CONVERT => TRUE) |
|--------------------------------------------------------------------------|
| <test>22257e111</test>                                                   |
+--------------------------------------------------------------------------+