- plattformunabhängig
- C++
- frei verfügbar (LGPL)
XML-Parser
XML-Parser
Ich bin momentan auf der Suche nach einem XML-Parser. Dabei sind mir folgende Kriterien wichtig:
Re: XML-Parser
Xerces? http://xerces.apache.org/xerces-c/
Ansonsten kanst du dir ja einen mini Browser (z.b. Dilo) auseinanderschrauben, der hat ja auch einen HTML parser drin(was ja prinzipiell XML ist)
Ansonsten kanst du dir ja einen mini Browser (z.b. Dilo) auseinanderschrauben, der hat ja auch einen HTML parser drin(was ja prinzipiell XML ist)
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: XML-Parser
Ich habe meinen XML-Parser selbst geschrieben. Nette Übung Header und Code sind zusammen ca. 21kB, also gut überschaubar.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: XML-Parser
TinyXML ist sonst auch nicht so schlecht und dabei noch recht schlank. Lizenziert ist es glaub ich unter der zlib Lizenz. Oder wenn du willst kannst du auch meinen Parser verwenden oder dir dort Anregungen holen. Den Code dazu gibt es auf launchpad.net. Unlängst habe ich auch das Ansprechen mit einer XPath Syntax und auch mit Boost ähnlichen Insertern eingebaut, so dass man das ganz sehr konfortabel einsetzen kann:
config.xml:
Die vorhergehende XML-Datei kann man jetzt zb wie folgt verwenden:
Oder das Erstellen der XML Datei würde so ausschauen:
Das nur so einmal als Anregung. Mein Parser ist zurzeit zwar unter der GPL, aber das ist ja nicht unbedingt was über das man nicht reden könnte. Wenn jemand meinen Code testet bin ich immer froh. Auch wenn ich den Parser schon in mehreren Projekten verwendet habe und er eigentlich schon recht stabil sein sollte 
config.xml:
Code: Alles auswählen
<config type="super-config" version="1">
<videomode width="1680" height="1050" refreshrate="50" fullscreen="1"/>
<savegame id="1">/home/tom/.supergame/save001.save</savegame>
</config>
Code: Alles auswählen
xml::Document config;
config.read("config.xml");
if( config["/@type"] != "super-config" || config["/@version"] != 1 ) // Zurzeit noch so nicht möglich
// ist aber bereits auf meiner todo liste. Zurzeit müsste man das so machen:
// if( config.get<std::string>("/@type") != "super-config" || config.get<int>("/@version") != 1 )
{
std::cerr << "Invalid config file." << std::endl;
return -1;
}
uint16 width = config["/videomode@width"];
uint16 height = config["/videomode@height"];
uint16 refreshrate = config["/videomode@refreshrate"];
bool fullscreen = config["/videomode@fullscreen"];
std::string savegame = config["/savegame"];
Code: Alles auswählen
xml::Document config( xml::makeRoot("config") );
config.set
( "/@type", "super-config" )
( "/@version", 1 )
( "/videomode@width", 1680 )
( "/videomode@height", 1050 )
( "/videomode@refreshrate", 50 )
( "/videomode@fullscreen", 1 )
( "/savegame@id", 1 )
( "/savegame", "/home/tom/.supergame/save001.save" );
config.write("config.xml");
</config>

"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at