使用tinyxml生成xml

时间:2023-01-16 07:18:02


我想使用tinyxml生成如下xml:

<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
<Man ver="3.0">
<Hobby Day="forever">编程</Hobby>
</Man>

----------------------------------------------------------------------------

代码如下:

// Tinyxml_Test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
using std::string;

// tinyxml
#include "./lib/tinyxml/tinyxml.h"
#pragma comment(lib, "./lib/tinyxml/tinyxml.lib")
#pragma comment(linker, "/NODEFAULTLIB:libc.lib") // 禁用默认库libc.lib,不然编译会出错

int _tmain(int argc, _TCHAR* argv[])
{
TiXmlDocument doc; // 代表整个XML

// 生成 <?xml version="1.0" encoding="GB2312" standalone="yes" ?>
// 这个相当于XML的头了
TiXmlDeclaration* pxmlDecl = new TiXmlDeclaration("1.0", "GB2312", "yes");
if (pxmlDecl == NULL)
{
return 0;
}
doc.LinkEndChild(pxmlDecl);

// 生成XML根节点Man
TiXmlElement* pXmlRootElement = new TiXmlElement("Man");
if (pXmlRootElement != NULL)
{
pXmlRootElement->SetAttribute("ver", "3.0"); // 根节点属性
doc.LinkEndChild(pXmlRootElement); // 根节点放入XML文档
}

// 根节点的第一个子节点
TiXmlElement *pXmlElementChild = new TiXmlElement("Hobby");
if (pXmlElementChild != NULL && pXmlRootElement != NULL)
{
pXmlRootElement->LinkEndChild(pXmlElementChild);
}


// 设置子节点文本和属性
TiXmlText *pXmlCmdText = new TiXmlText("编程");
if (pXmlCmdText != NULL && pXmlElementChild != NULL)
{
pXmlElementChild->LinkEndChild(pXmlCmdText);
pXmlElementChild->SetAttribute("Day", "forever");
}

// 打印整个XML
TiXmlPrinter printer;
doc.Accept(&printer);
printf("生成的xml:\n\n%s", printer.CStr());

// 输出子节点属性
if (pXmlElementChild != NULL)
{
const char *pDayValue= pXmlElementChild->Attribute("Day");
printf("\nDay=%s \n", pDayValue);
printf("子节点内容:%s", pXmlElementChild->GetText());
}

getchar();
return 0;
}

---------------------------------------------------------------------

效果截图:

使用tinyxml生成xml

 

 --------------------------------