Ich habe versucht, ein Attribut für den Stamm in einem XML-Dokument mit tinyxml2 zu setzen.Tinyxml2 root setattribute
In TinyXML, der folgende Code
TiXmlDocument doc;
TiXmlElement * root = new TiXmlElement("ROOT");
root->SetAttribute("msg","ImFree");
doc.LinkEndChild(root);
TiXmlElement * element = new TiXmlElement("CHILD");
TiXmlText * text = new TiXmlText("Message");
element->LinkEndChild(text);
root->LinkEndChild(element);
doc.SaveFile("foo.xml");
erzeugt die folgende XML-Datei:
<ROOT msg="ImFree">
<CHILD>Message</CHILD>
</ROOT>
Allerdings habe ich noch keine Ahnung, wie das Attribut der Wurzel in tinyxml2 einzustellen. Ich habe den folgenden Code:
tinyxml2::XMLDocument xml_doc;
tinyxml2::XMLNode * p_root = xml_doc.NewElement("ROOT");
xml_doc.InsertFirstChild(p_root);
tinyxml2::XMLElement * p_element = xml_doc.NewElement("CHILD");
p_element->SetText("Message");
p_root->InsertEndChild(p_element);
Welche erzeugt:
<ROOT>
<CHILD>Message</CHILD>
</ROOT>
Nun, wenn ich p_root->SetText();
, p_root->SetValue();
oder SetAttribute
schreiben, alle geben einen Fehler, dass class tinyxml2::XMLNode has no member named SetText
oder SetValue
oder SetAttribute
.
Ich suchte hart, um die Antwort online zu finden, konnte es aber nicht finden.
Dank
Prost
Ich dachte, dass die Wurzel immer ein XMLNode sein muss, war ein wenig verwirrend. Vielen Dank. – Keivan
Was ich verwirrend finde, ist, dass die Wurzel eines XML in TinyXml2 immer als ein Knoten angesehen wird. Dieses Problem tritt also auch beim Parsen von XML auf. Um das erste Kind zu bekommen, müssen Sie es an einen 'XMLNode' übergeben. Wie löst man es dort? – Keivan
XMLNode ist eine [abstrakte Klasse] (https://en.wikibooks.org/wiki/C%2B%2B_Programming/Classes/Abstract_Classes) was bedeutet, dass jeder XMLNode auch eine der abgeleiteten Klassen sein muss. Es gibt integrierte Cast-Methoden, um zu ermitteln, welche abgeleitete Klasse ein bestimmter XMLNode ist (z. B. "ToElement()", "ToDocument()" usw.). Wenn dies Ihre Frage beantwortet, markieren Sie sie bitte als solche. – dquam