- Categorias:
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.
Sintaxe¶
PARSE_XML( <string_containing_xml> [ , <disable_auto_convert> ] )
PARSE_XML( STR => <string_containing_xml>
[ , DISABLE_AUTO_CONVERT => <disable_auto_convert> ] )
Argumentos¶
Obrigatório:
string_containing_xml
. OR .STR => string_containing_xml
Especifique uma expressão que seja avaliada como um valor VARCHAR que contenha XML válido.
Opcional:
disable_auto_convert
. OR .DISABLE_AUTO_CONVERT => disable_auto_convert
Uma expressão booliana que especifica se a função deve ou não tentar converter valores numéricos e boolianos 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 quiser que a função converta esses valores, defina esse argumento como
TRUE
. Essa configuração tem um efeito semelhante ao do parâmetroDISABLE_AUTO_CONVERT
em CREATE FILE FORMAT.Se você quiser que a função converta esses valores, defina esse argumento como
FALSE
ou omita-o.
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). Para obter mais informações, consulte Referência dos tipos de dados SQL.
NUMERIC e BOOLEAN:
PARSE_XML tenta converter valores obviamente numéricos e boolianos 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 argumentodisable_auto_convert
.TIMESTAMP, DATE, TIME, BINARY:
Como o XML não representa valores como TIMESTAMP, DATE, TIME ou BINARY nativamente, eles precisam ser representados como cadeias de caracteres em XML. PARSE_XML não reconhece automaticamente esses valores. Eles são mantidos como cadeia de caracteres, portanto, converta os valores de cadeias de caracteres para tipos de dados nativos do SQL, se necessário.
Atributos XML são uma coleção desordenada de pares nome/valor. A função PARSE_XML não necessariamente preserva 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.
Quando PARSE_XML é usado para inserir valores numéricos em uma coluna VARIANT que são uma mistura de números inteiros (por exemplo, INT ou INTEGER) e valores em notação decimal (por exemplo, NUMBER ou FLOAT), a função pode adicionar zeros finais aos valores.
O exemplo a seguir usa o PARSE_XML para inserir uma combinação de valores inteiros e valores em notação decimal em uma coluna VARIANT:
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>'));
Consultar a tabela:
SELECT * FROM test_xml_table;
+--------------+ | XMLCOL | |--------------| | <c>3.100</c> | | <e>2.000</e> | | <b>0.123</b> | +--------------+
A saída mostra que os zeros finais foram adicionados aos valores nas duas primeiras linhas.
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 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;
+------------------------+
| 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 está desativada, a função interpreta um número em notação científica como 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> |
+-------------------------------------+-------------------------------------------+
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);
+--------------------------------------------------------------------------+
| PARSE_XML(STR => '<TEST>22257E111</TEST>', DISABLE_AUTO_CONVERT => TRUE) |
|--------------------------------------------------------------------------|
| <test>22257e111</test> |
+--------------------------------------------------------------------------+