Tinyxml2读取xml文件

来源:互联网 发布:苹果免费多开微信软件 编辑:程序博客网 时间:2024/05/17 01:34

XML文件内容

<?xml version="1.0" encoding="UTF-8"?>
<table>
    <person>
        <profession>teacher</profession>
        <name>Tom</name>
        <age>28</age>
        <height>1.7</height>
    </person>
    <person>
        <profession>student</profession>
        <name>Jerry</name>
        <age>18</age>
        <height>1.8</height>
    </person>
    <person>
        <profession>police</profession>
        <name>Jack</name>
        <age>38</age>
        <height>1.6</height>
    </person>
</table>

具体代码

CString GetAppPath()
{
//获取应用程序根目录
TCHAR modulePath[MAX_PATH];
GetModuleFileName(NULL, modulePath, MAX_PATH);
CString strModulePath(modulePath);
strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));
return strModulePath;
}


int main()
{
//获取xml文件路径
CString fileName("\\test.xml");
CString Path = GetAppPath();
Path += fileName;

//CString转换为const char*
const size_t strsize = (Path.GetLength() + 1) * 2; // 宽字符的长度;
char * pstr = new char[strsize]; //分配空间;
size_t sz = 0;
wcstombs_s(&sz, pstr, strsize, Path, _TRUNCATE);
const char* FilePath = pstr;//xml文件绝对路径

//创建一个xml文档对象
tinyxml2::XMLDocument *myDocument = new tinyxml2::XMLDocument();
myDocument->LoadFile(FilePath);

//读取根节点
XMLElement *RootElement = myDocument->FirstChildElement();
cout << RootElement->Value() << endl;

//循环输出每一个Person属性
XMLElement *FirstPerson = RootElement->FirstChildElement();//获取第一个Person节点
while (FirstPerson)
{
XMLElement *PersonType = FirstPerson->FirstChildElement();
cout << "职业:" << PersonType->GetText() << " ";
XMLElement *PersonName = PersonType->NextSiblingElement();
cout << "姓名:" << PersonName->GetText() << " ";
XMLElement *PersonAge = PersonName->NextSiblingElement();
cout << "年龄:" << PersonAge->GetText() << " ";
XMLElement *PersonHeight = PersonAge->NextSiblingElement();
cout << "身高:" << PersonHeight->GetText() << endl;
FirstPerson = FirstPerson->NextSiblingElement();
}
}

0 0