- Categorias:
 
XMLGET¶
Extrai um objeto do elemento XML (geralmente chamado simplesmente de tag) do conteúdo do elemento externo XML com base no nome e no número de instância da tag especificada.
(Note que uma tag XML não é o mesmo que uma tag de governança de dados do Snowflake.)
Sintaxe¶
XMLGET( <expression> , <tag_name> [ , <instance_number> ] )
Argumentos¶
expressionA expressão a partir da qual se extrai o elemento.
A expressão deve avaliar como um OBJECT (ou um VARIANT contendo um OBJECT). O OBJECT deve conter XML válido no formato interno que o Snowflake suporta. Normalmente, isso significa que o OBJECT foi produzido por uma das seguintes opções:
Chamada da função PARSE_XML.
Carregamento dos dados (por exemplo, pelo comando COPY INTO <tabela>) e especificação que os dados estão no formato XML.
A função XMLGET não opera diretamente sobre uma expressão VARCHAR mesmo que esse VARCHAR contenha um texto XML válido.
tag_nameO nome de uma tag XML armazenada no
expression.instance_numberSe o XML tiver múltiplas instâncias de
tag_name, então useinstance_numberpara especificar qual instância deve ser recuperada. Como um índice de matriz, oinstance_numberé baseado em 0, não baseado em 1.instance_numberpode ser omitido, caso em que é utilizado o valor padrão 0.
Retornos¶
O tipo de dados do valor retornado é OBJECT.
A função retorna NULL nos seguintes casos:
Se algum argumento de XMLGET for NULL.
Se a instância da tag não for encontrada.
Consulte as Notas de Uso para obter mais detalhes.
Notas de uso¶
O resultado de XMLGET não é o conteúdo da tag (ou seja, o texto entre as tags), mas o elemento inteiro (a tag de abertura, o conteúdo e a tag de fechamento). Do valor retornado em OBJECT, você pode extrair o nome da tag, os valores dos atributos da tag e o conteúdo do elemento (inclusive as tags aninhadas) usando a função GET:
Para extrair valores de atributos, use
GET(tag, '@attrname').Para extrair o conteúdo, use
GET(tag, '$').Para extrair o nome da tag, use
GET(tag, '@').
Você pode extrair tags aninhadas aninhando as chamadas de função XMLGET. Por exemplo:
SELECT XMLGET(XMLGET(my_xml_column, 'my_tag'), 'my_inner_tag') ...;
As posições das tags internas no conteúdo podem ser obtidas por meio de
GET(tag, 'inner-tag-name'). Se o conteúdo contiver vários elementos, as posições serão representadas como uma matriz.Você não pode usar XMLGET para extrair o elemento mais externo. Para obter o elemento mais externo, selecione o próprio
expression.
Exemplos¶
O exemplo a seguir cria uma tabela com um OBJECT que contém XML e, em seguida, usa a função XMLGET para extrair elementos desse OBJECT.
CREATE OR REPLACE TABLE xml_demo (id INTEGER, object_col OBJECT);
INSERT INTO xml_demo (id, object_col)
  SELECT 1001,
    PARSE_XML('<level1> 1 <level2> 2 <level3> 3A </level3> <level3> 3B </level3> </level2> </level1>');
SELECT object_col,
       XMLGET(object_col, 'level2'),
       XMLGET(XMLGET(object_col, 'level2'), 'level3', 1)
  FROM xml_demo;
+-------------------------+------------------------------+---------------------------------------------------+
| OBJECT_COL              | XMLGET(OBJECT_COL, 'LEVEL2') | XMLGET(XMLGET(OBJECT_COL, 'LEVEL2'), 'LEVEL3', 1) |
|-------------------------+------------------------------+---------------------------------------------------|
| <level1>                | <level2>                     | <level3>3B</level3>                               |
|   1                     |   2                          |                                                   |
|   <level2>              |   <level3>3A</level3>        |                                                   |
|     2                   |   <level3>3B</level3>        |                                                   |
|     <level3>3A</level3> | </level2>                    |                                                   |
|     <level3>3B</level3> |                              |                                                   |
|   </level2>             |                              |                                                   |
| </level1>               |                              |                                                   |
+-------------------------+------------------------------+---------------------------------------------------+
Este exemplo mostra como usar GET com XMLGET para recuperar o conteúdo de um elemento. No exemplo, a tag level2 contém três itens (texto e duas tags aninhadas), portanto, GET retorna esses itens em um ARRAY. As tags aninhadas são representadas por OBJECTs (pares chave-valor). A propriedade @ contém o nome da tag aninhada e a propriedade $ contém o conteúdo da tag aninhada.
SELECT object_col,
       GET(XMLGET(object_col, 'level2'), '$') AS content_of_element
  FROM xml_demo;
+-------------------------+--------------------+
| OBJECT_COL              | CONTENT_OF_ELEMENT |
|-------------------------+--------------------|
| <level1>                | [                  |
|   1                     |   2,               |
|   <level2>              |   {                |
|     2                   |     "$": "3A",     |
|     <level3>3A</level3> |     "@": "level3"  |
|     <level3>3B</level3> |   },               |
|   </level2>             |   {                |
| </level1>               |     "$": "3B",     |
|                         |     "@": "level3"  |
|                         |   }                |
|                         | ]                  |
+-------------------------+--------------------+
Este exemplo mostra como usar GET com XMLGET para recuperar um atributo de uma tag.
INSERT INTO xml_demo (id, object_col)
  SELECT 1002,
      PARSE_XML('<level1> 1 <level2 an_attribute="my attribute"> 2 </level2> </level1>');
SELECT object_col,
       GET(XMLGET(object_col, 'level2'), '@an_attribute') AS attribute
  FROM xml_demo
  WHERE ID = 1002;
+--------------------------------------------------+----------------+
| OBJECT_COL                                       | ATTRIBUTE      |
|--------------------------------------------------+----------------|
| <level1>                                         | "my attribute" |
|   1                                              |                |
|   <level2 an_attribute="my attribute">2</level2> |                |
| </level1>                                        |                |
+--------------------------------------------------+----------------+
Nota
Para obter mais exemplos de consultas que usam a função XMLGET, consulte Exemplos de trabalho com XML.