Como desaninhar dados em formato XML
Lattes
Suponha que você tenha um arquivo XML como mostrado abaixo e você deseja desaninhar os dados para poder analisa-lós.
Exemplo XML
<root>
<src_xml DATA-ATUALIZACAO="2022-02-24" HORA-ATUALIZACAO="12:00:00" NUMERO-IDENTIFICADOR="123" SISTEMA-ORIGEM-XML="SistemaXYZ">
<PRODUCAO-BIBLIOGRAFICA>
<ARTIGOS-ACEITOS-PARA-PUBLICACAO>
<DADOS-BASICOS-DO-ARTIGO ANO-DO-ARTIGO="2021" DOI="..." FLAG-DIVULGACAO-CIENTIFICA="NAO" ...>
<!-- outros atributos de DADOS-BASICOS-DO-ARTIGO -->
</DADOS-BASICOS-DO-ARTIGO>
<DETALHAMENTO-DO-ARTIGO FASCICULO="..." ISSN="..." ...>
<!-- outros atributos de DETALHAMENTO-DO-ARTIGO -->
</DETALHAMENTO-DO-ARTIGO>
</ARTIGOS-ACEITOS-PARA-PUBLICACAO>
<!-- outros elementos de PRODUCAO-BIBLIOGRAFICA -->
</PRODUCAO-BIBLIOGRAFICA>
</src_xml>
</root>
Como Desaninhar
Seleção dos Atributos Principais
SELECT
src_xml,
get(src_xml, '@DATA-ATUALIZACAO') as data_atualizacao,
get(src_xml, '@HORA-ATUALIZACAO') as hora_atualizacao,
get(src_xml, '@NUMERO-IDENTIFICADOR') as lattes_id,
get(src_xml, '@SISTEMA-ORIGEM-XML') as sistema_origem_xml,
FROM
sua_tabela
Aqui, estamos selecionando os atributos principais diretamente do nó src_xml. A função get é usada para extrair valores de atributos.
Desaninhamento dos Dados Básicos do Artigo:
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DADOS-BASICOS-DO-ARTIGO'), '@ANO-DO-ARTIGO') as dados_basicos_ano,
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DADOS-BASICOS-DO-ARTIGO'), '@DOI') as dados_basicos_doi,
Aqui, estamos usando a função xmlget para acessar os nós aninhados dentro de src_xml e, em seguida, a função get para extrair atributos específicos desses nós aninhados.
Desaninhamento dos Detalhes do Artigo
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DETALHAMENTO-DO-ARTIGO'), '@FASCICULO') as detalhamento_fasciculo,
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DETALHAMENTO-DO-ARTIGO'), '@ISSN') as detalhamento_issn
Aqui, estamos fazendo o mesmo processo para desaninhar atributos específicos dentro do nó DETALHAMENTO-DO-ARTIGO.
Ao final do processo do exemplo mostrado acima, a query ira ficar da seguinte maneira:
SELECT
src_xml,
get(src_xml, '@DATA-ATUALIZACAO') as data_atualizacao,
get(src_xml, '@HORA-ATUALIZACAO') as hora_atualizacao,
get(src_xml, '@NUMERO-IDENTIFICADOR') as lattes_id,
get(src_xml, '@SISTEMA-ORIGEM-XML') as sistema_origem_xml,
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DADOS-BASICOS-DO-ARTIGO'), '@ANO-DO-ARTIGO') as dados_basicos_ano,
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DADOS-BASICOS-DO-ARTIGO'), '@DOI') as dados_basicos_doi,
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DETALHAMENTO-DO-ARTIGO'), '@FASCICULO') as detalhamento_fasciculo,
get(xmlget(src_xml, 'PRODUCAO-BIBLIOGRAFICA/ARTIGOS-ACEITOS-PARA-PUBLICACAO/DETALHAMENTO-DO-ARTIGO'), '@ISSN') as detalhamento_issn
FROM
sua_tabela
Em resumo, a consulta SQL está acessando e desaninhando dados de um campo XML chamado src_xml em uma tabela chamada sua_tabela. As funções get e xmlget são usadas para navegar pela estrutura XML e extrair informações específicas para cada atributo que você deseja recuperar. Este é um exemplo genérico e você precisará ajustar o código conforme a estrutura real do seu XML e do seu banco de dados.
Updated 8 months ago