ich habe mir Helferfunktionen geschrieben, um aus XML-Dateien mit wenig Code Daten rausziehen zu können. Ein typisches XML-File sieht so aus:
Code: Alles auswählen
<Objekt>
<Dings name="bla" id="5" />
<Blubb wert="7.2" />
</Objekt>
Code: Alles auswählen
/// Liest das benannte Attribut aus dem gegebenen Element und gibt dessen Inhalt als gewünschten Typ zurück
template <typename Typ>
Typ LiesAttribut( const TiXmlElement* pElm, const char* pAttrName)
{
const char* attr = pElm->Attribute( pAttrName);
if( !attr)
WirfAusnahme( boost::str( boost::format( "Attribut \"%s\" erwartet in Element \"%s\".") % pAttrName % pElm->ValueStr()));
Typ erg;
try
{
erg = boost::lexical_cast<Typ>( attr);
} catch( boost::bad_lexical_cast& ex)
{
WirfAusnahme( boost::str( boost::format( "Attribut \"%s\" in Node \"%s\" konnte nicht in Zieltyp konvertiert werden - %s") % pAttrName % pElm->Value() % ex.what()));
}
return erg;
}
/// Template-Spezialisierung für std::string - braucht keine Konvertierung in Zieltyp
template <>
inline std::string LiesAttribut( const TiXmlElement* pElm, const char* pAttrName)
{
const char* attr = pElm->Attribute( pAttrName);
if( !attr)
WirfAusnahme( boost::str( boost::format( "Attribut \"%s\" erwartet in Element \"%s\".") % pAttrName % pElm->ValueStr()));
return std::string( attr);
}