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
-
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
-
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.htmlDeine 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
constweg, was im allgemeinen auch nur zu Fehlern führt! In 99.999999...% der Fälle muss man einconstnicht 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...