TinyXML-2是一个简单,小巧,高效的C ++ XML解析器,可以轻松集成到其他程序中。可以从tinyxml2下载TinyXML。下载完成后解压tinyxml2-master.zip,将tinyxml2.h和tinyxml2.cpp两个文件放到自己的项目中,在使用tinyxml2的文件中#include"tinyxml2.h"
stu
man
我们现在要创建上面内容的xml文件。
第一步,添加声明,xml声明包含了版本和编码格式
第二步,创建根节点
第三步,创建子节点
第四步,为子节点增加内容
第五步,为子节点增加属性
第六步,保存xml文件
tinyxml2::XMLDocument doc;
//1.添加声明
tinyxml2::XMLDeclaration* declaration = doc.NewDeclaration();
doc.InsertFirstChild(declaration);
//2.创建根节点
tinyxml2::XMLElement* root = doc.NewElement("school");
doc.InsertEndChild(root);
//3.创建子节点
tinyxml2::XMLElement* childNodeStu = doc.NewElement(“student”);
tinyxml2::XMLElement* childNodeTea = doc.NewElement(“teacher”);
tinyxml2::XMLElement* childNodeTeaGender = doc.NewElement(“gender”);
//4.为子节点增加内容
tinyxml2::XMLText* contentStu = doc.NewText(“stu”);
childNodeStu->InsertFirstChild(contentStu);
tinyxml2::XMLText* contentGender = doc.NewText(“man”);
childNodeTeaGender->InsertFirstChild(contentGender);
//5.为子节点增加属性
childNodeStu->SetAttribute("Name", "libai");
root->InsertEndChild(childNodeStu);//childNodeStu是root的子节点
root->InsertEndChild(childNodeTea);//childNodeTea是root的子节点
childNodeTea->InsertEndChild(childNodeTeaGender);//childNodeTeaGender是childNodeTea的子节点
//6.保存xml文件
doc.SaveFile(“school.xml”);
还是对上面的第2节中的xml文件进行解析。
第一步,加载xml文件
第二步,找到根节点
第三步,获取子节点信息
tinyxml2::XMLDocument doc;
//1.加载xml文件
if(doc.LoadFile("school.xml") != 0) {
return;
}
//2.找到根节点
tinyxml2::XMLElement* root = doc.RootElement();
if (xmlRoot == NULL) {
return;
}
//3.获取子节点信息
tinyxml2::XMLElement* childNodeStu = root->FirstChildElement("student");
std::string contentStu = childNodeStu->GetText();
在使用VS2015环境中,代码的编码是GB2312,而xml文件的编码格式是UTF-8,在xml文件中如果有中文,那么应该对获取到的字符串进行UTF-8到GB2312的编码转换;如果要向xml文件中写入中文,那么应该先将要写入的中文字符串进行GB2312到UTF-8的编码转换。转换函数如下:(下面这部分代码为来自C++中GB2312字符串和UTF-8之间的转换)
/***********************************
函数:Utf8ToGB2312
功能:UTF-8转换为GB2312
************************************/
char* Utf8ToGB2312(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) {
delete[] wstr;
wstr = NULL;
}
return str;
}
/***********************************
函数:GB2312ToUtf8
功能:GB2312转换为UTF-8
************************************/
char* GB2312ToUtf8(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}