Nesse cpp::daily de hoje vamos falar uma das bibliotecas mais utilizadas do mundo.
Existem várias bibliotecas para fazer parser de XML e já já vamos postar uma lista das melhores. Cada uma com seus prós e contra, mas a Expat tem bastante diferenciais, começando pelo fato de ser indicada pela W3C.
De todas com certeza, a Expat é a mais difícil de implementar, mas a garantia do resultado é de 100% . Além de ser a mais utilizada de todas, projetos como: AbiWord, Android Studio, Apache OpenOffice, Audacity, aria2, CMake, D-Bus, Electron, Elinks, Firefox, Git, Godot, LibreOffice e muitos outros a utilizam.
A Expat pode ser implementada por diversas linguagens de programação, tais como: Python, PHP, Perl e entre outras.
Ela foi escrita em C e pode ser intimidante devido aos vários tipos de manipuladores e opções que você pode definir. Mas você só precisa aprender quatro funções para fazer 80% do que deseja fazer com elas:
XML_ParserCreate
- Para criar um novo objeto analisador.XML_SetElementHandler
- Para definir manipuladores para tags de início e fim.XML_SetCharacterDataHandler
- Para definir o manipulador para texto.XML_Parse
- Para passar um buffer cheio de documentos para o analisadorAntes de qualquer coisa você precisa possuí-la instalada no seu include
. Ela está em todos os repositórios de distro, então basta usar o gerenciador de pacotes da sua distro, exemplos:
Para entendermos, vamos mostrar um exemplo de um código e para mais detalhes, sugiro a leitura da documentação que é bem concisa, pois a única coisa que eu senti falta na documentação foi de um exemplo simples para entendimento em linhas gerais.
Então, eu criei esse exemplo básico, mas já funcional. Para fins didáticos o código não é orientada a objetos para que você possa usar tanto em C como em C++ .
Para isso vamos usar esse exemplo de XML: vim programmers.xml
E para ler esse XML vamos usar esse código: vim main.cpp
Para compilar rode o comando:
Agora é só rodar o ./parser
e notar que as tags são exibidas pela função start(void *userData, const char *name, const char *args[])
mais precisamente pela variável name
.
E o conteúdo das tags pela value(void *userData, const char *val, int len)
mais precisamente pela variável cpy
. A função end não possui conteúdo, pois ela servirá para usarmos no XML_SetElementHandler
, como dito acima.
Tente modificar, exibir em tabelas e outros como prática de exercício, ok?!
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: