XML mit C++



  • Hi,

    ich schreibe gerade meine Dipl. Arbeit mit Visual C++. Nun muss ich für eine bestimmte Funktionalität XML Dateien schreiben und wieder auslesen.

    Gibt es bestimmte APIs die sich dafür gut eignen? Eigentlich reicht es, wenn die API relativ einfach ist, ich muss für mehrere Objekte nur sowas in der Art schreiben:

    <Objekt>
    <ID=...>
    <X=...>
    <Y=...>
    <Z=...>
    </Objekt>

    Gruß
    Alex





  • perfekt. Vielen Dank!



  • Hi,

    wenn du es etwas komfortabler haben möchtest (Iteratoren, keine rohen Pointer, keine Error-Codes usw.), schau dir mal tinyxml++ an.

    http://ticpp.googlecode.com/svn/docs/ticpp.html

    Solange du keine Validierung brauchst (leistet weder tinyxml noch die Wrapper-Variante), sollte das reichen.



  • Noch zu erwähnen wäre der Arabica-Parser. Iteratoren, RAII, keine Zeiger, und trotzdem vollständige SAX/DOM-Umsetzung. Allerdings ist Arabica selbst nur ein Wrapper auf XercesC, MSXML oder ich glaube auch TinyXML. Wenn der Backend-Parser Validierung bietet, bietet Arabica diese auch.

    http://www.jezuk.co.uk/cgi-bin/view/arabica


  • Administrator

    Aquae schrieb:

    Hi,

    wenn du es etwas komfortabler haben möchtest (Iteratoren, keine rohen Pointer, keine Error-Codes usw.), schau dir mal tinyxml++ an.

    http://ticpp.googlecode.com/svn/docs/ticpp.html

    Solange du keine Validierung brauchst (leistet weder tinyxml noch die Wrapper-Variante), sollte das reichen.

    Ganz ehrlich, von TinyXML++ rate ich persönlich ab. Die Speicherverwaltung von TinyXML++ ist MISERABEL!
    Wenn du mit TinyXML++ über z.B. 3000 Nodes iterieren willst, dann wird immer neuer Speicher für einen neuen Nodewrapper erstellt und an den Node vorher zur Verwaltung übergeben. Wenn du dann aus dem Scope gehst, räumt TinyXML++ diese 3000 neuen und völlig unnötig angelegten Nodewrappers rekursiv auf, was zu einem Stackoverflow führt.

    TinyXML dagegen ist wirklich nicht schlecht, wenn auch teilweise etwas mühsam zu handhaben. Aber immerhin funktioniert es einwandfrei.

    Grüssli


Log in to reply