um parser XML simples e robusto

Slides:



Advertisements
Apresentações semelhantes
Nota do Editor: dica para criar o PPT
Advertisements

Sistemas Operacionais
Sistemas Distribuídos
Augusto NevesJoão CarlosRodrigo Paula Linguagem de Programação C++ Componentes do Grupo.
Tipos Primitivos, Variáveis e Operadores Aritméticos
Sistemas Cliente/Servidor Introdução
Arquitetura e organização de computadores.
Entrada e Saída Introdução.
um parser XML simples e robusto
XML (eXtensible Markup Language) W3C - World Wide Web Consortium Documentos TXT estruturados? Por que XML? XML, ou eXtensible Markup Language, é uma linguagem.
Prof. Luis Otavio Alvares
Silberschatz and Galvin Operating System Concepts Unidade 1: Introdução O que é um sistema operacional? Systemas simples em lote (batch) Sistemas.
Professor: Erivelto Tschoeke – UDESC/CEPLAN
Softwares.
Princípios e Conceitos de Software(v2)
Sistema Operacional.
Professor Fernando Luís
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Seminário de Engenharia de Usabilidade
Sistemas Operacionais Gerenciamento de Memória
PROGRAMAÇÃO I UNIDADE 1.
Aula prática 7 Strings Monitoria de Introdução à Programação
XML Extended Markup Language
Gerenciamento de Configuração
PROGRAMAÇÃO ESTRUTURADA II
Extensible Stylesheet Language (XSL) Renata Pontin de Mattos Fortes SCE-225 Hipermídia 2°Semestre 2003.
Metolodogia de Desenvolvimento de Data Warehouse
Gerenciamento de Dados
Stream streamneste contexto: sequência de bytes Utilizado em diversas plataformas Simplifica o tratamento de dados e sua integração Bibliotecas em C++
“Xml foi a decisão lógica para as tarefas de comunicação aplicação-aplicação padronizadas” (Jason Levitt ) Como chegamos aqui...
Tipos de Dados Paradigmas de Programação
Conceitos de J2EE para a WEB
Faculdade de Tecnologia SENAC Pelotas
Programação em C++ Compiladores
Curso de Web Master Php – 1ª Aula.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
FLUXOGRAMAS.
Paradigmas de Linguagens de Programação Aula 2
SISTEMAS DISTRIBUIDOS Aula 4
Execução de programas Cap. VIII.
3. Introdução à Linguagem C
Tópicos em Sistemas Operacionais (LINUX) Prof:. Msc. Arimatéia Junior Fortaleza-2011.
Algoritmos e Estrutura de Dados I Jean Carlo Mendes
Sistemas de Informação
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Introdução a Banco de Dados Aula 04
Monitoria IP ~if669 Garbage Collection e pacotes.
Aula Prática 11 Operações com Arquivos Monitoria
SQLite Banco de Dados II.
Produção de Sites Unidade 9 – XML Prof.: Henrique Santos.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Sistemas de Informação – mais que tecnologia Profa. Reane Franco Goulart.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Aula – Sistemas Operacionais
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
Aula prática 7 Strings Monitoria de Introdução à Programação.
Estruturas de Dados Murilo Salgado Razoli.
FACULDADE CAMBURY Sistemas Operacionais Profª Adriana Vettorazzo.
Sistemas Operacionais IV – Gerenciamento de E/S
Equipe Danilo Miguel Elias Lacerda Felipe Riguete Henderson Garcia
1Trabalho elaborado por Alexandra. Análise de sistemas de informação: O que são dados? O que é informação? Definição de sistemas de informação? Que conjunto.
Sistemas Multimídia Distribuídos
Modelagem de dados XML Yago Zacarias Gomes Coutinho Ribeiro
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
INTRODUÇÃO AO jQuery PROFESSORA ADRIANA SILVA. O que é jQuery  jQuery biblioteca para desenvolvimento rápido de scripts em java, que interagem com o.
UNIVERSIDADE CATÓLICA DE PELOTAS CENTRO POLITÉCNICO CURSO DE CIÊNCIA DA COMPUTAÇÃO Redes de Computadores Ferramenta NTop (Network Traffic Probe) Explorador.
Bruna Cavallero Martins Universidade Católica de Pelotas.
Transcrição da apresentação:

um parser XML simples e robusto TinyXML um parser XML simples e robusto Vitor Pastor Baracho

O que ele faz? Em resumo, o TinyXML analisa uma sequência de entrada (no caso um documento XML) e determina uma estrutura independente de plataforma ou linguagem: um Modelo de Objeto de Documentos (DOM), que permite trabalhar com os elementos de modo altamente dinâmico e independente. Isto significa que o TinyXML armazena a informação do documento XML em objetos C++ que podem ser manipulados livremente.

Motivação Ao analisar o problema da CEMIG, percebemos que era necessário um mecanismo capaz de retirar os dados da entrada XML e transferi-los para a estrutura de dados da OGDF. A TinyXML mostrou ser a biblioteca ideal para a tarefa, visto que ela é extremamente compacta, elaborada para um rápido e fácil aprendizado, e robusta (o código foi muito testado e é bastante maduro e estável). Além disto, ela é distribuída sob a licença Zlib e pode ser usada para fins de código aberto ou comerciais.

Características A TinyXML pode ser compilada para utilizar ou não a STL. TinyXML é compatível com UTF-8, de modo a permitir que arquivos XML sejam manipulados em qualquer linguagem.

A TinyXML reconhece os seguintes caracteres especiais pré-definidos: & & < < > > " " &apos; ' Eles são reconhecidos quando o documento XML é lido.

Fluxo de saída A saída pode ser gerada de várias maneiras diferentes, que possuem vantagens e limitações: 1- Print( FILE* ). Saída para um std-C stream, que incluem todos os arquivos de C assim como stdout. 2- Operador <<. Saída para um C++ stream. 3- Objeto TiXmlPrinter. Saída para um std::string ou buffer de memória. É uma classe da TinyXML que permite diversas funções de formatação e é útil quando se deseja uma saída para memória.

Fluxos de entrada e saída I/O Caso TIXML_USE_STL esteja ativado, a biblioteca é compatível com os operadores de fluxo em C++ (>>, <<) além dos C(FILE*) streams. A seguir, algumas diferenças que devem ser consideradas:

Em C: Entrada: Baseada em FILE*; Métodos Parse() e LoadFile(); Saída: Métodos Print() e SaveFile(); São métodos rápidos e tolerantes a erros no documento XML. A saída gerada é de leitura facilitada para humanos. Devem ser usados quando não se precisar dos streams de C++.

Em C++: Entrada: Baseada em std::istream; Operador >>; Saída: Baseada em std::ostream; Operador <<; São métodos mais lentos, porém úteis para transmissões na rede. Não são tolerantes a erros, como por exemplo dois elementos root em um documento XML.

Espaços em branco A TinyXML é compatível com a remoção de espaços duplicados, e com a manutenção destes. Por exemplo: Caso a função estática global TiXmlBase::SetCondeseWhiteSpace(bool) seja setada, a biblioteca irá condensar todos os espaços em branco em um só, caso contrário não. Ela é setada como default.

Handles Handles permitem acesso direto a elementos do documento XML, de modo a permitir a verificação de código (retornos nulos de funções) e ainda permitir que o código continue limpo. Para mais informações, vale a pena consultar a classe TiXmlHandle, na documentação da biblioteca.

Rastreamento de linha e coluna A TinyXML permite que nós e atributos sejam rastreados no documento fonte. Para isto, são utilizados os métodos TiXmlBase::Row() e TiXmlBase::Column(). As tabulações corretas podem ser configuradas utilizando o método TiXmlDocument::SetTabSize().

Utilizando a biblioteca Um Makefile em Linux e uma solução para o Visual C++ estão disponíveis no site, e podem ser compilados e executados. Para utilizar a biblioteca em uma aplicação, como no problema da CEMIG, basta adicionar os arquivos tinyxml.cpp, tinyxml.h, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, e tinystr.h para o projeto ou makefile.

Exemplo Prático O exemplo disponível na documentação, utiliza o seguinte documento XML como entrada: <?xml version="1.0" standalone=no> <!-- Our to do list data --> <ToDo> <Item priority="1"> Go to the <bold>Toy store!</bold></Item> <Item priority="2"> Do bills</Item> </ToDo>

Para ler este exemplo, de um arquivo (digamos exemplo Para ler este exemplo, de um arquivo (digamos exemplo.xml), cria-se um documento e carrega o arquivo nele: TiXmlDocument doc( “exemplo.xml" ); doc.LoadFile(); Com isto, o documento já está carregado na estrutura, e pronto para ser manipulado.

Vamos dar uma olhada nas linhas do documento, e como elas se relacionam com a estrutura: <?xml version="1.0" standalone=no> A primeira linha do documento é uma declaração e se transforma em um objeto da classe TiXmlDeclaration. Ele vai ser o primeiro filho do nó documento. Esta é a única tag diretiva/especial cujo parse é feito pela biblioteca. Normalmente as tags são armazenadas em um objeto TiXmlUnknown.

A próxima linha é: <!-- Our to do list data --> Este comentário irá se tornar um objeto da classe TiXmlComment.

Continuando... <ToDo> Esta tag define um objeto da classe TiXmlElement. Este especificamente não contém atributos, porém contém outros dois elementos: <Item priority="1"> Cria outro elemento TiXmlElement que é um filho do elemento ToDo. Este elemento possui um atributo com o nome (name) “priority” e o valor (value) “1”.

Go to the Um TiXmlText. Este objeto é um nó folha (leaf node) e não pode conter outros elementos. Ele é filho do TiXmlElement “Item”. <bold> Outro TiXmlElement, também é filho do TiXmlElement “Item”. E assim sucessivamente...

Olhando a árvore final dos objetos instanciados, obtém-se: |TiXmlDocument "demo.xml" |TiXmlDeclaration "version='1.0'" "standalone=no" |TiXmlComment "Our to do list data" |TiXmlElement "ToDo" |TiXmlElement "Item" Attributes: “priority” = “1” |TiXmlText "Go to the" |TiXmlElement "bold" |TiXmlText "Toy store!" |TiXmlElement "Item" Attributes: “priority”= “2” |TiXmlText "Do bills"