2011-01-13 9 views
7

Ich kenne mindestens drei leichte C++ XML-Parser: RapidXML, TinyXML und PugiXML. Alle drei verwenden jedoch eine DOM-basierte Schnittstelle (dh sie erstellen ihre eigene In-Memory-Darstellung des XML-Dokuments und stellen dann eine Schnittstelle bereit, um sie zu durchlaufen und zu manipulieren). Für die meisten Situationen, denen ich mich zu stellen habe, bevorzuge ich die SAX-Schnittstelle (wo der Parser nur einen Strom von Ereignissen wie Start-of-Tag ausspuckt und der Anwendungscode dafür verantwortlich ist, was er will, basierend auf diesen Ereignissen) .Leichter C++ SAX XML-Parser

Kann jemand eine leichte C++ - XML-Bibliothek mit einer SAX-Schnittstelle empfehlen?

Edit: Ich sollte auch beachten Sie die Microsoft XmlLite Bibliothek, die hat eine SAX-Schnittstelle verwenden (na ja, eigentlich ein „Pull“ Schnittstelle, die möglicherweise sogar besser ist). Leider ist es im Moment für mich ausgeschlossen, da ich weiß, dass es nur Quellcode und Windows gibt (bitte korrigiert mich, wenn ich falsch liege).

+0

machen https://github.com/ igagis/mikroxml – igagis

Antwort

5

Ich habe expat verwendet, wenn ich XML analysieren musste. Es ist sehr leicht (es war einmal, es ist eine Weile her, seit ich XML-Sachen gemacht habe) und macht den Job.

+0

Ich muss zugeben, dass ich nicht expat die Aufmerksamkeit gab, die es verdient. Verwenden Sie es mit einem C++ - Wrapper? Wenn ja, welcher? –

+0

@John: Ich habe eine Weile gebraucht, um mich daran zu erinnern, aber als ich das getan habe, habe ich dieses verwendet: http://beta.codeproject.com/KB/XML/expatimpl.aspx. Aber das war nur eine sehr dünne Hülle und es ist jetzt ernsthaft veraltet. – sbi

+0

In Ordnung. Sieht so aus, als ob Expat vernünftig ist, auch wenn ich meinen eigenen C++ - Wrapper darüber lege. –

0

PugiXML und RapidXML verfügen nicht über DOM-konforme Schnittstellen. Diese API hatte erhebliche Einschränkungen hinsichtlich Funktionalität und Konformität. Vielleicht möchten Sie VTD-XML untersuchen, das wesentlich fortgeschrittener ist als entweder DOM oder SAX/Pull

5

können Sie versuchen http://die-xml.googlecode.com/. es scheint sehr klein und leicht

dies zu nutzen ist ein kürzlich C++ 0x XML SAX-Parser Open Source und der Autor ist bereit, den Anbieter

parst einen Eingangsstrom und erzeugt Ereignisse auf Rückrufe kompatibel std :: function

die Stapelmaschine verwendet endliche Automaten als Backend und einige Ereignisse verwenden Iteratoren um Pufferung zu minimieren (Tag und Textknoten beginnen), ist es ziemlich leicht