- 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:
Syntax¶
PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )
PARSE_XML( STR => <string_containing_xml>
[ , DISABLE_AUTO_CONVERT => <disable_auto_convert> ] )
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 ParameterDISABLE_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 Argumentdisable_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;+-------------------------+ | 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);+-------------------------------------+-------------------------------------------+ | 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);+--------------------------------------------------------------------------+ | PARSE_XML(STR => '<TEST>22257E111</TEST>', DISABLE_AUTO_CONVERT => TRUE) | |--------------------------------------------------------------------------| | <test>22257e111</test> | +--------------------------------------------------------------------------+