- 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.
- Consulte também:
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
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âmetroDISABLE_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 argumentodisable_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;+-------------------------+ | 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);+-------------------------------------+-------------------------------------------+ | 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> | +--------------------------------------------------------------------------+