Categorias:

Funções de dados semiestruturados e estruturados (Análise)

PARSE_XML

Interpreta uma cadeia de caracteres de entrada como um documento XML, produzindo um valor OBJECT. Se a entrada for NULL, a saída será NULL.

Consulte também:

CHECK_XML

Sintaxe

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

Argumentos

Obrigatório:

string_containing_xml . OR . STR => string_containing_xml

Esta expressão deve ser avaliada como um VARCHAR. O VARCHAR deve conter um XML válido.

Opcional:

disable_auto_convert . OR . DISABLE_AUTO_CONVERT => disable_auto_convert

Expressão booleana que especifica se a função deve ou não tentar converter valores numéricos e booleanos em string_containing_xml para tipos de dados do Snowflake. (Para obter mais detalhes sobre essa conversão, consulte as Notas de uso abaixo).

  • Se você não quer que a função converta esses valores, defina isso como TRUE. Isso tem um efeito semelhante ao parâmetro DISABLE_AUTO_CONVERT em CREATE FILE FORMAT.

  • Se você quiser que a função converta esses valores, defina isso como FALSE ou omita esse argumento.

Padrão: FALSE

Retornos

O tipo de dados do valor retornado é OBJECT. O OBJECT contém uma representação interna do XML.

Notas de uso

  • Você deve especificar todos os argumentos por nome ou por posição. Você não pode especificar alguns dos argumentos por nome e outros argumentos por posição.

    Ao especificar um argumento por nome, você não pode usar aspas duplas no nome do argumento.

  • O conteúdo de cada elemento dos documentos XML é texto. PARSE_XML tenta converter alguns dados XML de texto em nativo (Snowflake SQL) Referência de tipos de dados SQL.

    • NUMERIC e BOOLEAN:

      PARSE_XML tenta converter valores obviamente numéricos e booleanos em representação nativa, de modo que a impressão destes valores de volta produza resultados textualmente idênticos. Por exemplo, ao analisar números decimais, PARSE_XML tenta preservar a exatidão da representação ao tratar 123,45 como NUMBER(5,2), e não como DOUBLE. No entanto:

      • Números em notação científica (isto é, 1.2345e+02) ou números que não podem ser armazenados como casas decimais de pontos fixos devido a limitações de faixa ou escala são armazenados como DOUBLE.

      • Se o conteúdo de um elemento XML for um número com dígitos após o ponto decimal, então PARSE_XML poderá truncar os zeros no final.

      Se você não quiser que a função realize esta conversão, passe TRUE para o argumento disable_auto_convert.

    • TIMESTAMP, DATE, TIME, BINARY:

      Como XML não representa valores como TIMESTAMP, DATE, TIME ou BINARY nativamente, eles têm que ser representados como cadeias de caracteres em XML. PARSE_XML não reconhece automaticamente estes valores; eles são retidos como cadeias de caracteres, portanto os usuários devem converter os valores das cadeias de caracteres em tipos de dados nativos SQL, se necessário.

  • Atributos XML são uma coleção desordenada de pares nome/valor. A função PARSE_XML não preserva necessariamente a ordem. Por exemplo, a conversão de texto para XML e de volta ao texto pode resultar em uma cadeia de caracteres que contém as informações originais em uma ordem diferente.

  • Você pode ver mudanças no espaço em branco entre os elementos ao converter de cadeia de caracteres para XML.

Exemplos

O exemplo a seguir demonstra como usar a função PARSE_XML para converter uma cadeia de caracteres de XML para um OBJECT que pode ser inserido em uma coluna 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;
Copy
+-------------------------+
|           V             |
+-------------------------+
| <a></a>                 |
| <a attr="123">text</a>  |
| <a><b>X</b><b>Y</b></a> |
+-------------------------+

O exemplo a seguir demonstra as diferenças entre usar e desativar a conversão de valores numéricos. Neste exemplo, quando a conversão não é desativada, a função interpreta um número em notação científica como um DOUBLE.

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

O exemplo a seguir demonstra como especificar os argumentos para a função por nome:

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