- 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_xmlpara 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âmetro- DISABLE_AUTO_CONVERTem CREATE FILE FORMAT.
- Se você quiser que a função converta esses valores, defina esse argumento como - FALSEou 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 - TRUEpara o argumento- disable_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>                                                   |
+--------------------------------------------------------------------------+