Catégories :

Fonctions de données semi-structurées (analyse)

PARSE_XML

Interprète une chaîne d’entrée comme un document XML, produisant une valeur OBJECT. Si l’entrée est NULL, la sortie est NULL.

Voir aussi :

CHECK_XML

Syntaxe

PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )

Arguments

Obligatoire :

string_containing_xml

Cette expression devrait correspondre à une valeur VARCHAR. La valeur VARCHAR doit être au formatXML valide.

Facultatif :

disable_auto_convert

Expression booléenne qui spécifie si la fonction doit ou non tenter de convertir les valeurs numériques et booléennes de string_containing_xml en types de données Snowflake. (Pour plus de détails sur cette conversion, voir Notes sur l’utilisation ci-dessous).

  • Si vous ne voulez pas que la fonction convertisse ces valeurs, définissez cette valeur sur TRUE. Cela a un effet similaire à celui du paramètre DISABLE_AUTO_CONVERT dans CREATE FILE FORMAT.

  • Si vous voulez que la fonction convertisse ces valeurs, donnez-lui la valeur FALSE ou omettez cet argument.

Par défaut : FALSE

Renvoie

Le type de données de la valeur renvoyée est OBJECT. L’OBJECT contient une représentation interne du XML.

Notes sur l’utilisation

  • Le contenu de chaque élément des documents XML est du texte. PARSE_XML tente de convertir certaines données XML de texte en données natives (Snowflake SQL) Types de données.

    • NUMERIC et BOOLEAN :

      PARSE_XML tente de convertir des valeurs évidemment numériques et booléennes en représentation native de manière à ce que l’impression de ces valeurs donne des résultats textuellement identiques. Par exemple, lors de l’analyse des nombres décimaux, PARSE_XML tente de préserver l’exactitude de la représentation en considérant 123,45 comme NUMBER(5,2) et non comme DOUBLE. Cependant :

      • Les nombres en notation scientifique (c.-à-d. 1.2345e+02) ou ceux qui ne peuvent pas être stockés en tant que décimales à virgule fixe en raison de limitations de plage ou d’échelle sont stockés sous la forme DOUBLE.

      • Si le contenu d’un élément XML est un nombre avec des chiffres après la virgule, alors PARSE_XML peut tronquer les zéros de fin.

      Si vous ne voulez pas que la fonction effectue cette conversion, passez TRUE pour l’argument disable_auto_convert.

    • TIMESTAMP, DATE, TIME, BINARY:

      Comme le format XML ne représente pas des valeurs telles que TIMESTAMP, DATE, TIME ou BINARY de manière native, celles-ci doivent être représentées sous forme de chaînes au format XML. PARSE_XML ne reconnaît pas automatiquement ces valeurs ; elles sont conservées sous forme de chaînes. Les utilisateurs doivent donc convertir les valeurs des chaînes en types de données SQL natifs si nécessaire.

  • Les attributs XML sont un ensemble non classé de paires nom/valeur. La fonction PARSE_XML ne préserve pas nécessairement l’ordre. Par exemple, la conversion de texte en XML et de nouveau en texte peut entraîner une chaîne qui contient les informations d’origine dans un ordre différent.

  • Vous pouvez voir des changements dans les espaces entre les éléments lors de la conversion de chaîne en XML.

Exemples

L’exemple suivant montre comment utiliser la fonction PARSE_XML pour convertir une chaîne de XML en un OBJECT qui peut être inséré dans une colonne OBJECT :

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

L’exemple suivant montre les différences entre l’utilisation et la désactivation de la conversion des valeurs numériques. Dans cet exemple, lorsque la conversion n’est pas désactivée, la fonction interprète un nombre en notation scientifique comme un DOUBLE.

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>                    |
+-------------------------------------+-------------------------------------------+
Revenir au début