2011-01-13 17 views
7

Wiem o co najmniej trzech lekkich analizatorach kodu XML w języku C++: RapidXML, TinyXML i PugiXML. Jednak wszystkie trzy używają interfejsu opartego na DOM (tj. Budują własną reprezentację w pamięci dokumentu XML, a następnie udostępniają interfejs do przechodzenia i manipulowania nim). W większości sytuacji, z którymi mam do czynienia, zdecydowanie wolę interfejs SAX (w którym parser wypluwa strumień wydarzeń, np. Początek tagu, a kod aplikacji jest odpowiedzialny za robienie tego, co chce na podstawie tych zdarzeń) .Lekki analizator składni SAX XML w języku C++

Czy ktoś może polecić lekką bibliotekę C++ XML z interfejsem SAX?

Edycja: Powinienem również zwrócić uwagę na bibliotekę Microsoft XmlLite, która ma używać interfejsu SAX (dobrze, właściwie "pull" interfejs, który jest prawdopodobnie jeszcze lepszy). Niestety, w tej chwili jest to dla mnie wykluczone, o ile wiem, to zamknięte źródło i tylko Windows (proszę mnie poprawić, jeśli się mylę).

+0

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

Odpowiedz

5

Użyłem expat, kiedy potrzebowałem parsować XML. Jest bardzo lekki (no cóż, kiedyś, od czasu, gdy zrobiłem XML) i wykonuje swoją pracę.

+0

Muszę przyznać, że nie poświęciłem temu, na co zasługiwał. Czy używasz go z opakowaniem C++? Jeśli tak, to jaki? –

+0

@John: Zapamiętanie zajęło mi trochę czasu, ale kiedy to zrobiłem, użyłem tego: http://beta.codeproject.com/KB/XML/expatimpl.aspx. Ale to było tylko bardzo cienkie opakowanie, a teraz jest już bardzo przestarzałe. – sbi

+0

W porządku. Wygląda na to, że expat jest rozsądny, nawet jeśli umieściłbym na nim swoją własną nakładkę C++. –

0

PugiXML i RapidXML nie mają interfejsów zgodnych z DOM .. te interfejsy API miały poważne ograniczenia pod względem funkcjonalności i zgodności. Możesz sprawdzić VTD-XML, który jest znacznie bardziej zaawansowany niż DOM lub SAX/Pull

5

możesz spróbować http://die-xml.googlecode.com/. wydaje się być bardzo mały i łatwy w użyciu

to niedawno C++ 0x XML parser SAX open source i autor jest skłonny zwrotne

analizuje strumień wejściowy i generuje zdarzenia na wywołania zwrotne do kompatybilnych std :: funkcja

maszyna stos używa automatów skończonych jako backend i niektóre zdarzenia (początek znaczników tekstowych i węzłów) używać iteratorów w celu zminimalizowania buforowanie, co czyni go bardzo lekkie

Powiązane problemy