2016-05-03 15 views
0

tinyxml2を使用してXML文書のルート属性を設定しようとしています。 tinyxmlでTinyxml2ルート設定属性

、次のコード

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"); 

は、次のXMLファイルを生成します。

<ROOT msg="ImFree"> 
    <CHILD>Message</CHILD> 
</ROOT> 

は、しかし、私はまだどのようにtinyxml2にルートの属性を設定するには考えています。

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); 

生成します:私はp_root->SetText();p_root->SetValue();またはSetAttributeを書く場合

<ROOT> 
    <CHILD>Message</CHILD> 
</ROOT> 

は今、すべてがclass tinyxml2::XMLNode has no member named SetTextまたはSetValueまたはSetAttributeというエラーを与える私は、次のコードを持っています。

私はオンラインで回答を見つけるのは難しいですが、見つけられませんでした。

乾杯

答えて

0

おかげでtinyxml2::XMLElement * p_root = xml_doc.NewElement("ROOT");にあなたのライン tinyxml2::XMLNode * p_root = xml_doc.NewElement("ROOT");を変更してみてください。 XMLNodeにはSetAttributeメソッドがなく、XMLElementだけが(http://www.grinninglizard.com/tinyxml2docs/tinyxml2_8h_source.html)メソッドを持ちます。

+0

私はルートが常にXMLNodeでなければならないと考えましたが、ちょっと混乱しました。ありがとう。 – Keivan

+0

私が紛らわしいのは、XMLのルートが常にtinyxml2のノードとみなされるということです。したがって、この問題はXMLを解析する際にも発生します。最初の子を取得するには、それを 'XMLNode'に渡す必要があります。あなたはそれをどうやって解決しますか? – Keivan

+0

XMLNodeは[抽象クラス](https://en.wikibooks.org/wiki/C%2B%2B_Programming/Classes/Abstract_Classes)です。つまり、すべてのXMLNodeは派生クラスの1つでなければなりません。特定のXMLNodeがどの派生クラス(例えば 'ToElement()'、 'ToDocument()'など)を発見するためのキャストメソッドが組み込まれています。また、あなたの質問に答えた場合は、そのようにマークしてください。 – dquam

関連する問題