Usar uma biblioteca é a melhor idéia que você poder ter ! E principalmente se tratando de uma coisa tão prática como XML ! FILE *file = fopen("contato.xml","wb"); xmlDocPtr doc; //- ponteiro do documanto struct ESTRUTURA_GENÉRICA{ Enum xmlElementType { Typedef xmlNode* xmlNodePtr
Reinventar a roda é legal, mas não tem justificativa se a sua roda for "redonda" como todas as outras !
» Post Completo...*** Referências ***
A Libxml2 é uma biblioteca da GNOME e é altamente utilizada, além de ser recomendada pela W3C, que é o órgão regulamentador do padrão XML !
*** O que é XML ?! ***
Talvez você já ouviu falar muito sobre XML, mas o que é XML mesmo ?!
Por exemplo, HTML é um padrão construído em cima do padrão XML, mas XML é HTML? Não mesmo !
Você pode encontrar uma ótima referência sobre XML na www.w3schools.com, eu aprendi muito neste site ! Aliás, ele é muito bom em tudo !
XML é apenas um padrão para descrição dos dados. Ele é todo formado por texto, e quando interpretado te dá um resultado muito próximo a de um banco de dados.
Um exemplo simples de XML seria: contato.xml. Obs.: O seu browser irá interpretar o exemplo, e como sugestão você deve exibir o código-fonte para que você possa ver a formatação do arquivo !
*** XML na programação ***
Primeiro vamos aprender a gerar XML. Que é muito fácil mesmo !
fprintf(file,"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
fprintf(file,"<root>\n");
fprintf(file,"\t<contato>\n");
fprintf(file,"\t\t<nome>%s</nome>\n",nome);
fprintf(file,"\t\t<fone>%s</fone>\n",fone);
fprintf(file,"\t\t<email>%s</email>\n",email);
fprintf(file,"\t</contato>\n");
fprintf(file,"</root>");
fclose(file);
É aqui que entra a libxml2. De forma bem genérica você só precisa fazer isto:
xmlNode *root; //- ponteiro raiz
LIBXML_TEST_VERSION
doc = xmlReadFile(file, NULL, 0); //- Uso genérico
root = xmlDocGetRootElement(doc);
função_de_tratamento(root); //- aqui vc já pode trabalhar
xmlFreeDoc(doc);
xmlCleanupParser();
xmlMemoryDump();
*** Documentação Libxml2 ***
Mesmo sendo escrita em c, a libxml2 (e muitas outras) tem conceitos de Orientação a Objetos. Sabendo isso a documentação não será mais uma dor de cabeça.
xmlAttr, xmlDoc, xmlElement, xmlNode. Todos tem a mesma estrutura genérica inicial:
void * _private;
xmlElementType type; //- Identificação
const xmlChar *name; //- Nome
struct _xmlNode *children;
struct _xmlNode *last;
struct _xmlDtd *parent;
struct _xmlNode *next; //- Próximo elemento
struct _xmlNode *prev;
struct _xmlDoc *doc;
...
}
XML_ELEMENT_NODE = 1
XML_ATTRIBUTE_NODE = 2
XML_TEXT_NODE = 3
XML_CDATA_SECTION_NODE = 4
XML_ENTITY_REF_NODE = 5
XML_ENTITY_NODE = 6
XML_PI_NODE = 7
XML_COMMENT_NODE = 8
...
}
.:: Update 05/07/2008 ::.
Depois de algum tempo sem usar a libXML no Dev-Cpp (Devido a alguns probleminhas que antes não pareciam ter solução) resolvi examinar mais a fundo e ver o que eu tinha feito de errado.
No Linux é super de boa, pois a lib é da GNU e não tem porque dar problemas. No Windows também é simples, se você souber o que você está fazendo.
Acabei de descobrir que no Windows a libMXL tem mais duas dependências: libiconv e zlib.
» libiconv acusa erro na compilação: iconv.h: No such file or directory.
» zlib acusa erro na DLL: Você não precisa linkar a lib em seu projeto, mas a DLL zlib1.dll não pode ser esquecida.
Para instalar a libXML no Dev-Cpp use o repositório DevPaks ou o assistente de instalação do Dev-Cpp (WebUpdate) localizado em Ferramentas > Atualizações. Baixe os pacotes libxml2, libiconv e zlib.
Desconfio que o pacote libxml2 versão 2.6.23 tem pequenos problemas, pois tive que fazer algumas correções:
» -lxml2 seria o suficiente para que a lib fosse linkada em nosso projeto, mas tive que linkar com -llibxml2. Minha explicação é que onde deveria existir o arquivo libxml2.a existe o arquivo libxml2.lib... se fosse lib*.a eu não precisaria do prefixo lib.
» libiconv-2.dll. Este é o arquivo exigido quando se roda a aplicação e não iconv.dll como vem na instalação (diretório_do_Dev/bin).
O código de exemplo tem disponível duas versões versões compiladas (windows e Linux)... aproveitem !
*** Link's ***
Download: » Código Fonte
» Documentação libxml2
» Exemplos libxml2
» Definição XML (wikipedia)
» Tutorial XML (Super recomendado)
.:: Menu Rápido ::.
Linux | C/C++ | Downloads | SDL | [×]
Para programar tem que ser Linux ! Para Desktop prefiro o Ubuntu !
A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
- Script's GIMP - Python-Fu !!!
- Dicas Web
- Vídeo Compiz Fusion (Desktop 3D)
- Compilando com gcc e Makefile
- Que tal mudar para Ubuntu ?!
C e C++ são minhas linguagens de programação. No começo foi muito difícil, mas agora já estou mais prático (Ainda não é fácil).
- SDL - A Biblioteca dos Jogos 2D
- Analisador léxico de arquivos script
- Simpatizando com a Libxml2
- AsciiGen - Tabela ASCII em C
- Conexão com API C do MySQL
- Compilando com gcc e Makefile
Jogos e programas de minha autoria !
- DR Tetris 0.3 - Tetris no estilo tradicional !
- DR Quebra-Cabeça disponível para download !!!
- Freeggs - Liberdade aos ovos \o/
Se você quer aprender a desenhar... lápis e palel.
Se você quer aprender a programar jogos... SDL !!!
Se você quer aprender a programar jogos... SDL !!!
- Carregando mapas 2D no formato TMX
- Controle de tempo e Frame Rate
- SDL em Processamento de Imagens
- SDL_Surface - Introdução detalhada
- Imprimindo texto com SDL_Ttf
- SDL_Collide - Colisão 2D para jogos
- Tocando música e sons com SDL_mixer
- Gerando e carregando mapas 2D em jogos
- SDL - A Biblioteca dos Jogos 2D
terça-feira, 6 de novembro de 2007
Simpatizando com a Libxml2
Usar uma biblioteca é a melhor idéia que você poder ter ! E principalmente se tratando de uma coisa tão prática como XML !
Reinventar a roda é legal, mas não tem justificativa se a sua roda for "redonda" como todas as outras !
» Post Completo...
Assinar:
Postar comentários (Atom)
6 comentários:
Parabéns pelo post Diogo,fabuloso!
A comunidade agradece.
Vlw !!!
Não foi exatamente um tutorial, mas sei que irá orientar muita gente !
Muito bom post cara! =D
COncerteza vai ajudar muita gente!
Flw
Opa !!! Vlw !!!
Mais gente comentando !
Achei que meu blog tava juntando mosca de tão parado !
Seu comentário me animou a escrever muitos outros !
Observação: A libxml permite manipular e criar novos objetos após o carregamento ou simplesmente gerá-los. Não falei nada a respeito, mas é perfeitamente possível.
Obrigada! Foi o post mais útil que encontrei até agora!
Postar um comentário