Filter information in an XML using C

0

I need to extract relevant information from an XML that has this structure:

<ARTIGO-PUBLICADO SEQUENCIA-PRODUCAO="2">
    <DADOS-BASICOS-DO-ARTIGO IDIOMA="Inglês" DOI="" FLAG-RELEVANCIA="NAO" HOME-PAGE-DO-TRABALHO="" MEIO-DE-DIVULGACAO="IMPRESSO" NATUREZA="COMPLETO" TITULO-DO-ARTIGO-INGLES="" PAIS-DE-PUBLICACAO="Suiça" ANO-DO-ARTIGO="1987" TITULO-DO-ARTIGO="How to get the best out of automated information systems."/>

    <DETALHAMENTO-DO-ARTIGO PAGINA-FINAL="434" PAGINA-INICIAL="432" SERIE="" FASCICULO="4" VOLUME="8" LOCAL-DE-PUBLICACAO="Organização Mundial da Saúde" ISSN="" TITULO-DO-PERIODICO-OU-REVISTA="World Health Forum"/>

    <AUTORES ORDEM-DE-AUTORIA="1" NOME-PARA-CITACAO="SABBATINI, R. M. E." NOME-COMPLETO-DO-AUTOR="Renato Marcos Endrizzi Sabbatini"/>

    <PALAVRAS-CHAVE PALAVRA-CHAVE-6="" PALAVRA-CHAVE-5="" PALAVRA-CHAVE-4="" PALAVRA-CHAVE-3="Avaliação de tecnologias" PALAVRA-CHAVE-2="Sistemas de informação em saúde" PALAVRA-CHAVE-1="Informática Médica"/>
    <AREAS-DO-CONHECIMENTO>
        <AREA-DO-CONHECIMENTO-1 NOME-DA-ESPECIALIDADE="" NOME-DA-SUB-AREA-DO-CONHECIMENTO="Sistemas de Computação" NOME-DA-AREA-DO-CONHECIMENTO="Ciência da Computação" NOME-GRANDE-AREA-DO-CONHECIMENTO="CIENCIAS_EXATAS_E_DA_TERRA"/>
        <AREA-DO-CONHECIMENTO-2 NOME-DA-ESPECIALIDADE="" NOME-DA-SUB-AREA-DO-CONHECIMENTO="" NOME-DA-AREA-DO-CONHECIMENTO="Medicina" NOME-GRANDE-AREA-DO-CONHECIMENTO="CIENCIAS_DA_SAUDE"/>
    </AREAS-DO-CONHECIMENTO>

    <SETORES-DE-ATIVIDADE SETOR-DE-ATIVIDADE-3="" SETOR-DE-ATIVIDADE-2="Informática" SETOR-DE-ATIVIDADE-1="Atividades de Banco de Dados"/>

    <INFORMACOES-ADICIONAIS DESCRICAO-INFORMACOES-ADICIONAIS-INGLES="" DESCRICAO-INFORMACOES-ADICIONAIS=""/>
</ARTIGO-PUBLICADO>

After extraction, I need to send some of this data ( NOME-DO-AUTOR , among others) to a .csv file. My main idea was to transform XML into text to give search in the file and handle it.

Is there a library to facilitate this work?

    
asked by anonymous 02.12.2017 / 01:29

1 answer

-1

You can use this to extract information from the libxml library ( link )

to extract author name:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>

void
getReference (xmlDocPtr doc, xmlNodePtr cur) {

    xmlChar *nome;
    cur = cur->xmlChildrenNode;
    while (cur != NULL) {
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"AUTORES"))) {
            nome= xmlGetProp(cur, "NOME-COMPLETO-DO-AUTOR");
            printf("Nome do autor: %s\n", nome);
            xmlFree(nome);
        }
        cur = cur->next;
    }
    return;
}


void
parseDoc(char *docname) {

    xmlDocPtr doc;
    xmlNodePtr cur;

    doc = xmlParseFile(docname);

    if (doc == NULL ) {
        fprintf(stderr,"Document not parsed successfully. \n");
        return;
    }

    cur = xmlDocGetRootElement(doc);

    if (cur == NULL) {
        fprintf(stderr,"empty document\n");
        xmlFreeDoc(doc);
        return;
    }

    if (xmlStrcmp(cur->name, (const xmlChar *) "ARTIGO-PUBLICADO")) {
        fprintf(stderr,"document of the wrong type, root node != ARTIGO-PUBLICADO");
        xmlFreeDoc(doc);
        return;
    }

    getReference (doc, cur);
    xmlFreeDoc(doc);
    return;
}

int
main(int argc, char **argv) {

    char *docname;

    if (argc <= 1) {
        printf("Usage: %s docname\n", argv[0]);
        return(0);
    }

    docname = argv[1];
    parseDoc (docname);

    return (1);
}
    
03.12.2017 / 18:00