如何使用 tinyxml2 在节点内创建节点?
How to make a node inside a node using tinyxml2?
XMLDocument xmlDoc;
XMLNode * pRoot = xmlDoc.NewElement("Head");
xmlDoc.InsertFirstChild(pRoot);
XMLElement * pElement = xmlDoc.NewElement("Stat1");
pElement-> SetText(10);
pRoot->InsertEndChild(pElement);
pElement = xmlDoc.NewElement("Stat2");
pElement->SetText(0.5);
pRoot->InsertEndChild(pElement);
XMLNode * pRoot2 = xmlDoc.NewElement("Head2");
xmlDoc.InsertAfterChild(pRoot, pRoot2);
XMLElement * pElement2 = xmlDoc.NewElement("Stat3");
pElement2-> SetText(10);
pRoot2->InsertEndChild(pElement2);
XMLError eResult = xmlDoc.SaveFile("SavedData.xml");
XMLCheckResult(eResult);
以上代码将生成具有以下 xml 结构的 xml 文件
<Head>
<Stat1>10</Stat1>
<Stat2>0.5</Stat2>
</Head>
<Head2>
<Stat3>10</Stat3>
</Head2>
但我希望我的愿望 xml 结构像
<root>
<Head>
<inner-Head>
<Stat1>10</Stat1>
</inner-Head>
<inner-Head2>
<Stat2>0.5</Stat2>
</inner-Head2>
</Head>
<Head2>
<Stat3>10</Stat3>
</Head2>
</root>
我是 tinyxml2 的新手,找不到任何 tinyxml2 教程,我想实现的是在节点内有一个节点,如上所示。
在 tinyxml2 中创建节点和子节点的过程几乎是递归的:即,一旦你创建了一个,你就知道如何创建其余的。
我的建议是从上到下遵循层次结构,直到到达叶子。这样你只需要使用 InsertEndChild()。此外,您应该为节点使用描述性名称。
唯一不同的是,要创建根节点,您必须使用 XMLDoc.InsertEndChild(),而在其余的在您收到指向节点的指针的情况下,因此您必须使用 XMLNode.InsertEndChild().
的箭头
您想在文档中有一个 "root" 节点。那么:
XMLDocument xmlDoc;
XMLNode * nRoot = xmlDoc.NewElement( "root" );
xmlDoc.InsertEndChild( nRoot );
那你还想"Head"的,从root挂起。所以:
XMLNode * nHead = xmlDoc.NewElement( "Head" );
XMLNode * nHead2 = xmlDoc.NewElement( "Head2" );
nRoot->InsertEndChild( nHead );
nRoot->InsertEndChild( nHead2 );
到目前为止一切顺利。在 "Head" 内,您需要两个 "inner-Heads"。那么:
XMLNode * nInnerHead = xmlDoc.NewElement( "inner-Head" );
XMLNode * nInnerHead2 = xmlDoc.NewElement( "inner-Head2" );
nHead->InsertEndChild( nInnerHead );
nHead->InsertEndChild( nInnerHead2 );
最后,inner-Head 和 inner-Head2 内的叶子:
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>
希望对您有所帮助。
XMLDocument xmlDoc;
XMLNode * pRoot = xmlDoc.NewElement("Head");
xmlDoc.InsertFirstChild(pRoot);
XMLElement * pElement = xmlDoc.NewElement("Stat1");
pElement-> SetText(10);
pRoot->InsertEndChild(pElement);
pElement = xmlDoc.NewElement("Stat2");
pElement->SetText(0.5);
pRoot->InsertEndChild(pElement);
XMLNode * pRoot2 = xmlDoc.NewElement("Head2");
xmlDoc.InsertAfterChild(pRoot, pRoot2);
XMLElement * pElement2 = xmlDoc.NewElement("Stat3");
pElement2-> SetText(10);
pRoot2->InsertEndChild(pElement2);
XMLError eResult = xmlDoc.SaveFile("SavedData.xml");
XMLCheckResult(eResult);
以上代码将生成具有以下 xml 结构的 xml 文件
<Head>
<Stat1>10</Stat1>
<Stat2>0.5</Stat2>
</Head>
<Head2>
<Stat3>10</Stat3>
</Head2>
但我希望我的愿望 xml 结构像
<root>
<Head>
<inner-Head>
<Stat1>10</Stat1>
</inner-Head>
<inner-Head2>
<Stat2>0.5</Stat2>
</inner-Head2>
</Head>
<Head2>
<Stat3>10</Stat3>
</Head2>
</root>
我是 tinyxml2 的新手,找不到任何 tinyxml2 教程,我想实现的是在节点内有一个节点,如上所示。
在 tinyxml2 中创建节点和子节点的过程几乎是递归的:即,一旦你创建了一个,你就知道如何创建其余的。
我的建议是从上到下遵循层次结构,直到到达叶子。这样你只需要使用 InsertEndChild()。此外,您应该为节点使用描述性名称。
唯一不同的是,要创建根节点,您必须使用 XMLDoc.InsertEndChild(),而在其余的在您收到指向节点的指针的情况下,因此您必须使用 XMLNode.InsertEndChild().
的箭头您想在文档中有一个 "root" 节点。那么:
XMLDocument xmlDoc;
XMLNode * nRoot = xmlDoc.NewElement( "root" );
xmlDoc.InsertEndChild( nRoot );
那你还想"Head"的,从root挂起。所以:
XMLNode * nHead = xmlDoc.NewElement( "Head" );
XMLNode * nHead2 = xmlDoc.NewElement( "Head2" );
nRoot->InsertEndChild( nHead );
nRoot->InsertEndChild( nHead2 );
到目前为止一切顺利。在 "Head" 内,您需要两个 "inner-Heads"。那么:
XMLNode * nInnerHead = xmlDoc.NewElement( "inner-Head" );
XMLNode * nInnerHead2 = xmlDoc.NewElement( "inner-Head2" );
nHead->InsertEndChild( nInnerHead );
nHead->InsertEndChild( nInnerHead2 );
最后,inner-Head 和 inner-Head2 内的叶子:
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>
希望对您有所帮助。