- 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¶
- expression
- A 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_name
- O nome de uma tag XML armazenada no - expression.
- instance_number
- Se o XML tiver múltiplas instâncias de - tag_name, então use- instance_numberpara especificar qual instância deve ser recuperada. Como um índice de matriz, o- instance_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.