Qual é o melhor analisador de XML aberto para C++? [duplicado]

[[2] esta pergunta já tem uma resposta aqui:

Estou à procura de um processador XML simples, limpo e correcto para usar no meu projecto c++. Devo escrever o meu?

Author: peterh, 2008-10-04

12 answers

Que tal ... RapidXML? RapidXML é um analisador DOM XML muito rápido e pequeno escrito em C++. Destina-se principalmente a ambientes embutidos, jogos de computador, ou quaisquer outras aplicações onde a memória disponível ou o poder de processamento de CPU vem em um prêmio. RapidXML é licenciado sob a Boost Software License e seu código fonte está disponível gratuitamente.

Características

  • Velocidade de Processamento (incluindo árvore DOM construção) aproximação da velocidade de função strlen executado na os mesmos dados.
  • sobre uma UCP moderna (a partir de 2008) a o rendimento do analisador é de cerca de 1 bilhão personagens por segundo. Ver Secção de desempenho em linha Manual.
  • Pequena pegada de memória do Código e criou DOM trees.
  • uma implementação apenas de cabeçalhos, simplificar o processo de integração.
  • licença simples que permite o uso de quase qualquer propósito, tanto comercial e não comercial, sem qualquer obrigacao.
  • suporta UTF-8 e parcialmente UTF-16, UTF-32 encodings.
  • código-fonte Portátil Sem número dependências que não sejam muito pequenas subconjunto da Biblioteca Padrão C++.
  • este subconjunto é tão pequeno que pode ser facilmente emulado manualmente se utilizar = = ligações externas = =

Limitações

  • o analisador ignora o DOCTYPE declaracao.
  • não existe suporte para espaços de nomes XML.
  • o analisador não verifica validade do carácter.
  • a interface de o analisador não em conformidade com a especificação DOM.
  • o analisador não verifica atributo unicidade.

Fonte: wikipedia. org: / / Rapidxml


Dependendo da sua utilização, pode usar uma ligação de dados XML? CodeSynthesis XSD é um compilador de dados XML para C++ desenvolvido pela síntese de código e licenciado sob a GNU GPL e uma licença proprietária. Dada uma especificação de instância XML (XML Schema), gera classes de C++ que representar o vocabulário dado, bem como o código de análise e serialização.

Uma das características únicas do CodeSynthesis XSD é o seu suporte para dois esquemas XML diferentes para mapeamentos C++: em memória C++/Tree e C++/Parser orientado para fluxo. O mapeamento C++/Tree é um mapeamento tradicional com uma estrutura de dados em memória semelhante a uma árvore. C++ / Parser é um novo mapeamento semelhante ao SAX que representa a informação armazenada em documentos de instância XML como uma hierarquia de eventos de processamento específicos do vocabulário. Em comparação com C++/Tree, o mapeamento C++/Parser permite lidar com grandes documentos XML que não caberiam na memória, realizar processamento orientado a fluxo, ou usar uma representação existente na memória.

Fonte: wikipedia. org: / / CodeSynthesis XSD

 117
Author: jk., 2008-10-04 21:30:24

Pugixml - light-weight, simple and fast XML parser for C++ Muito pequeno (comparável ao RapidXML), muito rápido (comparável ao RapidXML), muito fácil de usar (melhor que do que o RapidXML).

 89
Author: Zbyl, 2016-07-07 03:31:19
 40
Author: Rob, 2008-10-04 17:22:55

O TiCPP é uma versão" mais C++ " do TinyXML.

'TiCPP' é o diminutivo do nome oficial TinyXML++. É uma interface completamente nova para o TinyXML ( http://www.grinninglizard.com/tinyxml/) que usa muitos dos pontos fortes de c++. Modelos, exceções e muito melhor tratamento de erros. Também está totalmente documentado em doxygen. É muito legal, porque esta versão vamos fazer uma interface minúscula exatamente da mesma maneira que antes ou você pode optar por usar o novo 'ticpp' classe. Tudo o que precisa de fazer é definir o TIXML_ USE_TICPP. Foi testado em VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5, e em Linux GNU GCC 3+

 15
Author: Kasprzol, 2008-10-04 18:27:22
Tenta este.: http://www.applied-mathematics.net/tools/xmlParser.html
é mais fácil e mais rápido do que RapidXML ou PUGXML.
TinyXML é o pior do "analisador simples".
 14
Author: Kat, 2010-08-18 09:55:15

Não utilize TinyXML se estiver preocupado com a eficiência/gestão da memória (tende a atribuir lotes de blocos minúsculos). O meu favorito é RapidXML .

 12
Author: yrp, 2008-10-04 19:48:09
Que tal gSOAP? É de código aberto e disponível gratuitamente sob a licença GPL. Apesar do seu nome, o gsoap toolkit é uma ferramenta genérica de ligação de dados XML e permite-lhe ligar os seus dados C E C++ ao XML automaticamente. Não há necessidade de usar uma API de processamento XML, basta deixá-lo ler/escrever seus dados em formato XML para você. Se você realmente precisa de um processador C++ XML super-simples, então o gSOAP pode ser um exagero. Mas para tudo o resto, tem funcionado bem como depoimentos mostrar para muitos aplicações industriais desde o gSOAP foi introduzido em 2001.

Aqui está uma breve lista de características:

  • Portátil: Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE, etc.
  • pequena pegada: código 73KB e menos de 2k de dados para implementar um aplicativo cliente de serviço Web XML (sem DOM para limitar a utilização de memória).
  • rápido: não acredite no que as outras ferramentas afirmam, a velocidade verdadeira deve ser medida com I / O. Para o gSOAP é mais de 3000 roundtrip XML mensagens sobre TCP / IP. Processamento de XML overhead é negligenciável, uma vez que é uma simples varredura linear da entrada/saída enquanto a serialização (de)ocorre.
  • Suporte a
  • XML: XML schema (XSD) importação/exportação, WSDL importação/exportação, espaços de nomes XML, canonicalização XML, XML com anexos (MIME), uso opcional do DOM, muitas opções para produzir XML com indentação, usar strings UTF8, etc.
  • validação XML: parcial e completa (opção)
  • Suporte WS: ws-segurança, WS-ReliableMessaging, Ws-endereçamento, WS-Política, WS-Política de segurança, e outros. Depuração: gestão integrada da memória com detecção de fugas, registo. API: não há API para aprender, apenas inicialização de contexto do motor "soap", então use a interface de leitura/escrita para seus dados, e destruição de contexto do motor "soap".

Por exemplo:

class Address
{ 
  std::string name;
  std::vector<LONG64> number;
  time_t date;
};

Execute então o "soapcp2" na declaração de classe Address acima para gerar o leitor e escritor soap_read_Address e soap_write_Address XML, para exemplo:

Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`

Isto produz uma representação XML do objecto Address a. Ao anotar as declarações de ficheiros header com os detalhes do espaço de nomes XML (não mostrado aqui), as ferramentas também geram esquemas. Este é um exemplo simples. As ferramentas gSOAP podem lidar com uma ampla gama de tipos de dados C E C++, incluindo estruturas ligadas baseadas em ponteiros e grafos (cíclicos) (ao invés de apenas árvores).

Espero que isto ajude.
 10
Author: RAM, 2018-07-24 13:07:38

O TinyXML pode ser o melhor para um trabalho XML simples, mas se precisar de mais funcionalidades, então tente o Xerces do projecto apache. Vá para a página seguinte para ler mais sobre suas características.

Http://xerces.apache.org/xerces-c/

 9
Author: Raminder, 2008-10-04 17:30:15

Sou uma novata em C++ e depois de tentar algumas sugestões diferentes nesta página devo dizer que gosto mais de pugixml. Tem fácil de entender a documentação e uma API de alto nível que era tudo o que eu estava procurando.

 9
Author: godspeedelbow, 2010-09-09 11:45:13

TinyXML, e também aumentar.Até três. Este último não cumpre todos os requisitos oficiais, mas é muito simples.

 8
Author: Lev, 2008-10-04 18:49:23
Gosto do analisador Gnome xml. É open source (licença MIT, para que você possa usá-lo em produtos comerciais), rápido e tem interfaces baseadas em DOM e SAX.

Http://xmlsoft.org/

 7
Author: dicroce, 2008-10-04 17:59:51

Tentar TinyXML ou IrrXML...Ambos são parsers XML leves (eu sugiro que você use TinyXML, de qualquer forma ).

 2
Author: Prog, 2008-10-04 17:27:05