TinyXML Attributwerte ändern



  • Hi,

    ich habe eine xml Datei der Form:

    <root>
    <Icon name="1a" X="2.5" Y="2.6" Z="4.0" />
    ...
    </root>

    Die Werte schreibe ich per:

    TiXmlElement* root;
    	TiXmlElement wert("Icon");
    
    	// Set attributes for an Element. 
    	// The arguments must be converted from string to (char*)
    	wert.SetAttribute("Name", name);
    	wert.SetAttribute("X", (char*)xString.c_str());
    	wert.SetAttribute("Y", (char*)yString.c_str());
    	wert.SetAttribute("Z", (char*)zString.c_str());
    
    	// Get the root Element and insert Icon as child
    	root = doc.FirstChildElement("root");
    	if (root)
    		root->InsertEndChild(wert);
    

    Dabei werden beim Schreiben aber die Elemente immer neu hinzugefügt. Wie kann man nur die Attribute eines Elementes ändern, wenn es schon vorhanden ist?

    Gruß
    Alex


  • Administrator

    wert.SetAttribute("X", (char*)xString.c_str());
    

    Pfui! Aus! Böser Neuling! 😃
    TinyXML unterstütz dies:

    wert.SetAttribute("X", xString.c_str());
    

    Und wenn du mit der Standardbibliothek kompilierst, dann unterstützt TinyXML sogar dies:

    wert.SetAttribute("X", xString);
    

    Zu deinem Problem:
    Vielleicht solltest du nicht jedesmal eine neue Node erstellen, sondern die alte holen und verändern?

    TiXmlElement* root = doc.FirstChildElement("root");
    TiXmlElement* icon = root.FirstChildElement("Icon");
    
    // bearbeite icon ...
    

    Und du könntest dann natürlich über alle Icons iterieren, wie man das macht, kannst du in der Dokumentation von TinyXML nachlesen.

    Grüssli



  • Hi,

    ich glaube du irrst dich. 😃

    wert.SetAttribute("X", xString.c_str());

    wirft bei mir nen Fehler.

    Grüße
    Alex


  • Administrator

    filth schrieb:

    ich glaube du irrst dich. 😃

    Definitiv nicht, bei mir geht es und wenn du in der Dokumentation nachsiehst, dann siehst du, dass dies auch unterstützt wird:
    http://www.grinninglizard.com/tinyxmldocs/classTiXmlElement.html

    Deine Konvertierung ist im übrigen sehr gefährlich und hässlich. Nicht nur ist es ein C-Cast, welche man dringend vermeiden sollte, sondern du castest auch ein const weg, was im allgemeinen auch nur zu Fehlern führt! In 99.999999...% der Fälle muss man ein const nicht loswerden. Ich habe es noch NIE erlebt!

    filth schrieb:

    wert.SetAttribute("X", xString.c_str());
    wirft bei mir nen Fehler.

    Äusserst schleche Fehlerbeschreibung!

    Grüssli



  • Stimmt, ich habe mich getäuscht.

    Mit

    wert.SetAttribute("X", xString.c_str());
    

    funktioniert es wohl...


Anmelden zum Antworten