Qual é o melhor analisador de XML aberto para C++? [duplicado]
- que processador XML devo usar em C++? [fechado] 6 respostas
Estou à procura de um processador XML simples, limpo e correcto para usar no meu projecto c++. Devo escrever o meu?
12 answers
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.
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).
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+
é mais fácil e mais rápido do que RapidXML ou PUGXML.
TinyXML é o pior do "analisador simples".
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 .
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).
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.
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.
TinyXML, e também aumentar.Até três. Este último não cumpre todos os requisitos oficiais, mas é muito simples.