Процесс создания узлов и подузлов un tinyxml2 довольно рекурсивен: то есть, когда вы его создаете, вы знаете, как создавать оставшиеся.
Мой совет - просто следовать иерархии сверху вниз, пока не дойдете до листьев. Таким образом, вам нужно будет использовать только InsertEndChild () . Кроме того, вы должны использовать описательные имена для ваших узлов.
Единственное отличие состоит в том, что для создания корневого узла необходимо использовать XMLDoc . InsertEndChild () , тогда как в остальных случаях вы получаете указатель на узел и поэтому вы должны использовать стрелку для XMLNode . InsertEndChild () .
Вы хотите иметь «корневой» узел в документе. Тогда:
XMLDocument xmlDoc;
XMLNode * nRoot = xmlDoc.NewElement( "root" );
xmlDoc.InsertEndChild( nRoot );
Тогда вам нужно иметь "Голову", висящую от корня. Итак:
XMLNode * nHead = xmlDoc.NewElement( "Head" );
XMLNode * nHead2 = xmlDoc.NewElement( "Head2" );
nRoot->InsertEndChild( nHead );
nRoot->InsertEndChild( nHead2 );
Пока все хорошо. Внутри «Головы» вам нужны две «Внутренние головы». Тогда:
XMLNode * nInnerHead = xmlDoc.NewElement( "inner-Head" );
XMLNode * nInnerHead2 = xmlDoc.NewElement( "inner-Head2" );
nHead->InsertEndChild( nInnerHead );
nHead->InsertEndChild( nInnerHead2 );
И, наконец, листья внутри Внутренняя головка и Внутренняя головка2 :
XMLElement * pElement = xmlDoc.NewElement( "Stat1" );
pElement-> SetText( 10 );
nInnerHead->InsertEndChild( pElement );
pElement = xmlDoc.NewElement( "Stat2" );
pElement->SetText( 0.5 );
nInnerHead2->InsertEndChild( pElement );
Другая ветка, в Head2 , еще проще, так как на ней висит только один лист:
pElement = xmlDoc.NewElement( "Stat3" );
pElement->SetText( 10 );
nHead2->InsertEndChild( pElement );
И вы получите желаемый результат:
<root>
<Head>
<inner-Head>
<Stat1>10</Stat1>
</inner-Head>
<inner-Head2>
<Stat2>0.5</Stat2>
</inner-Head2>
</Head>
<Head2>
<Stat3>10</Stat3>
</Head2>
</root>
Надеюсь, это поможет.