Cross-Plattform XML-Bibliothek (C++)



  • Also, da ich schon einige Zeit an einem Spiel arbeite, und ich immernoch eine Möglichkeit zum einfachen und "guten" Speichern der Karten suche, hab ich mich schließlich für XML entschieden.

    Jetzt suche ich dafür jedoch einen schönen, möglichst gut dokumentierten XML-Parser, den ich dann benutzen kann^^

    Er sollte XML sowohl einlesen, als auch ausgeben können^^

    Wenn möglich sollte es ein auch gutes Tutorial geben und er sollte in C++ geschrieben sein, oder es sollte einen Wrapper dafür geben, sehr viel mehr muss es nicht sein^^

    Gruß
    The-Kenny



  • Such mal nach TinyXml. Das hatte ich nach einer kurzen Recherche in der gleichen Richtung gefunden. Das Interface ist teilweise nicht ganz zeitgemäß, aber IIRC gibt es auch ein Frontend, das modernere C++-Sprachmittel benutzt. Und für meine Bedürftnisse hat es seinen Zweck sehr gut erfüllt.



  • Jop ich habe auch TinyXML, Tutorials habe ich wenig gefunden, aber der Code ist für Doxygen kommentiert, das sollte irgendwo verfügbar sein und das Beispielprogramm zeigt eigentlich das wichtigste.

    Ist eigentlich ein einzelner, gut dokumentierter Header, den man sich ansehen kann wenn man was sucht 😉

    Nur die Codeblähung ala

    TiXmlDocument doc;
    doc.parse("abc.xml");
    TiXmlNode * node;
    TiXmlElement * element;
    node = doc.FirstChild("asdf");
    if (node)
    {
        element = node->toElement();
        if (element)
        {
            [...]
        }
    }
    

    muss man fast über eine (inline) funktion lösen, sonst wird man verrückt 😉



  • Jupp, für TinyXML hab ich mich letztendlich auch entschieden^^

    Es werden zwar keine DTD´s geparsed, aber sooo schlimm ist das ja nicht *g*

    Und allzu schlimm finde ich das mit den fehlenden Templates und Exceptions auch nicht.
    Letzteres kann man ja, wenn man es unbedingt brauch, auch in den Sourcecode einbauen.



  • Eventuell wäre der Xerces Parser der Apache Group auch was für dich.
    Da er im Gegensatz zu TinyXML nicht nur einen DOM sondern auch einen SAX Parser anbietet.



  • Diese XML Light Lösungen wie "TinyXML" bringen nach meiner Erfahrung gar nichts.

    Wenn man einen "kompletten" Parser wie Xerces einsetzt kann man sich doch auch freiwillig auf die Funktionalität beschränken die man wirklich braucht statt sie gar nicht erst zu haben.

    Aber Xerces kann man später z.B. um XSLT (Xalan) erweitern; man man kann wie schon bemerkt SAX verwenden um die Performance zu verbessern ....

    Und auf DTDs und XSDs ganz zu verzichten halte ich für eine ganz schlechte Strategie ;
    XML Verarbeitung bläht oft wegen der notwendigen Fehlerbehandlung den Code sehr auf; für geprüfte Dokumente kann man das sehr verschlanken!

    Grüsse

    *this



  • ansonsten kann ich noch libxml2 bzw. libxml++ empfehlen. Der Parser ist auch sehr umfangreich (DTD, Schema, XPath, SAX, DOM etc.).

    Eine weiterer bekannter Parser ist expat. Dafür gibt es auch C++-Wrapper. Weiß aber nicht wie gut der ist.

    @Gast++
    wenn man nur einen simplen XML-Parser haben will ist TinyXML doch in Ordnung. Xerces ist ja ein riesen Monster im Vergleich zu TinyXML und XSLT, DTD etc. wird man ja nicht plötzlich brauchen.



  • rüdiger schrieb:

    @Gast++
    wenn man nur einen simplen XML-Parser haben will ist TinyXML doch in Ordnung. Xerces ist ja ein riesen Monster im Vergleich zu TinyXML und XSLT, DTD etc. wird man ja nicht plötzlich brauchen.

    Problematisch ist aber dass man anfangs immer schwer abschätzen kann was später mal sinnvoll werden könnte; und die Formuliereung einer DTD amortisiert sich nach meiner Erfahrung immer (für XSDs kann ich's nicht so bestimmt ausssagen; ich vermute ähnliches).

    Deshalb plan ich's gerne etwas grösser als anfangs unbedingt notwendig.

    Grüsse

    *this

    P.S.: @rüdiger : Guut dass du libxml2 ansprichst; ich hatte mal Probleme das für Win32 zu kompilieren; aber da hat sich jemand ein Herz gefasst und Binaries erzeugt! 🙂
    Muss ich unbedingt mal testen; hast Du Erfahrungswerte damit unter Win32?



  • Gast++ schrieb:

    P.S.: @rüdiger : Guut dass du libxml2 ansprichst; ich hatte mal Probleme das für Win32 zu kompilieren; aber da hat sich jemand ein Herz gefasst und Binaries erzeugt! 🙂
    Muss ich unbedingt mal testen; hast Du Erfahrungswerte damit unter Win32?

    Da kann ich dir leider nicht weiterhelfen. Habe libxml2 noch nicht unter Win32 genutzt.


Anmelden zum Antworten