Kategorien:

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

PARSE_XML

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

Siehe auch:

CHECK_XML, TO_XML, XMLGET

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

Geben Sie einen Ausdruck an, der zu einem VARCHAR-Wert ausgewertet wird, der eine gültige XML enthält.

Optional:

disable_auto_convert . OR . DISABLE_AUTO_CONVERT => disable_auto_convert

Ein 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 wollen, dass die Funktion diese Werte konvertiert, setzen Sie dieses Argument auf TRUE. Diese Einstellung hat eine ähnliche Wirkung wie der Parameter DISABLE_AUTO_CONVERT in CREATE FILE FORMAT.

  • Wenn Sie möchten, dass die Funktion diese Werte konvertiert, setzen Sie dieses Argument auf FALSE oder lassen Sie es 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) zu konvertieren. Weitere Informationen dazu finden Sie unter Referenz der SQL-Datentypen.

    • 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 dargestellt 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 Sie die Werte bei Bedarf von Zeichenfolgen in native SQL-Datentypen konvertieren müssen.

  • 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.

  • Wenn PARSE_XML verwendet wird, um numerische Werte in eine VARIANT-Spalte einzufügen, die eine Mischung aus Ganzzahlen (z. B. INT oder INTEGER) und Werten in Dezimalzahl-Notation (z. B. NUMBER oder FLOAT) sind, fügt die Funktion möglicherweise nachstehende Nullen zu den Werten hinzu.

    Das folgende Beispiel verwendet PARSE_XML, um eine Mischung aus Ganzzahlwerten und Werten in Dezimalzahl-Notation in eine VARIANT-Spalte einzufügen:

    CREATE OR REPLACE TABLE test_xml_table(xmlcol VARIANT);
    
    INSERT INTO test_xml_table (
      SELECT PARSE_XML($1) FROM VALUES
        ('<c>3.1</c>'),
        ('<e>2</e>'),
        ('<b>0.123</b>'));
    
    Copy

    Fragen Sie die Tabelle ab:

    SELECT * FROM test_xml_table;
    
    Copy
    +--------------+
    | XMLCOL       |
    |--------------|
    | <c>3.100</c> |
    | <e>2.000</e> |
    | <b>0.123</b> |
    +--------------+
    

    Die Ausgabe zeigt, dass die nachstehenden Nullen zu den Werten in den ersten beiden Zeilen hinzugefügt wurden.

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 OR REPLACE 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>                                                   |
+--------------------------------------------------------------------------+