下载TinyXML库文件​​http://sourceforge.net/projects/tinyxml/​

在TinyXML的目录找到tinystr.h, tinyxml.h,tinystr.cpp,tinyxml.cpp, tinyxmlerror.cpp,tinyxmlparser.cpp六个文件加入到自己的项目中去,在相应的工程文件中加入两个头文件 #include "tinyxml.h" ,#include "tinystr.h",在 tinystr.cpp,tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp四个文件的第一行加入头文件 #include "stdafx.h",然后即可使用TinyXML编程。


=======================================================

要读取的xml 数据如下:

<?xml version="1.0" encoding="gb2312" standalone="yes" ?>

<root xmlns:xsi="​​http://www.w3.org/2001/XMLSchema-instance​​">

<prop>

<id>100</id>

<title> test 1</title>

</prop>

<prop>

<id>200</id>

<title> test 2</title>

</prop>

</root>

注意要将 encoding设为gb2312格式,我一开始设置的是utf-8,结果遇到在程序里

写入中文没问题, 但在读出该中文时却有异常,把后面的 </ 符号也当作值读出来

了,后来和一同事讨论后才知道是编码问题。

=======================================================

string filefullPath = 要读取xml文件的绝对路径

//创建文件对象

TiXmlDocument * myDocument = new TiXmlDocument(filefullPath.c_str());

//加载文件数据

myDocument->LoadFile();

//获取根节点

TiXmlElement *RootElement = myDocument->RootElement();

=======================================================

以下是简单的读取操作:

//第一个子节点 TiXmlElement *CurrentPerson = RootElement->FirstChildElement();

//遍历获取指定节点数据 while(CurrentPerson) {

//子节点第一个属性 id TiXmlElement *IdElement = CurrentPerson->FirstChildElement();

//第一个属性的值 int nodeID = atoi(IdElement->FirstChild()->Value());

//子节点第二个属性 title TiXmlElement *TitleElement = IdElement->NextSiblingElement();

//第二个属性的值 CString nodeTitle = TitleElement->FirstChild()->Value();

.....................

如果还有后续属性,依次读取

.....................

维护读出的数据

.....................

//指向下一节点 CurrentPerson = CurrentPerson->NextSiblingElement(); } =======================================================

以下是增加xml记录的操作,例如要增加 id 为 300,title 为 test3 的记录:

//创建节点对象 TiXmlElement *PersonElement = new TiXmlElement("prop");

//链接到根节点 RootElement ->LinkEndChild(PersonElement);

//创建节点对象的属性节点 TiXmlElement *IdElement = new TiXmlElement("id"); TiXmlElement *TitleElement =new TiXmlElement("title");

//将属性节点链接到子节点 PersonElement->LinkEndChild(IdElement); PersonElement->LinkEndChild(TitleElement);

//创建属性对应数值对象

TiXmlText *idContent = new TiXmlText("300");

TiXmlText *titleContent = new TiXmlText("test3");

//将数值对象关联到属性节点 IdElement->LinkEndChild(idContent); TitleElement->LinkEndChild(titleContent);

//保存到文件 myDocument->SaveFile(m_filefullPath.c_str());

=======================================================

以下是删除记录操作,例如要删除id为300 的记录:

//获取当前要删除的节点 TiXmlElement * childElement = 根据id从自己读取时缓存的数据中获得

//从根节点移除子节点 RootElement->RemoveChild(childElement);

//保存文件 myDocument->SaveFile(m_filefullPath.c_str());

=======================================================





=======================================================

要读取的xml 数据如下:

<?xml version="1.0" encoding="gb2312" standalone="yes" ?>

<root xmlns:xsi="​​http://www.w3.org/2001/XMLSchema-instance​​">

<prop>

<id>100</id>

<title> test 1</title>

</prop>

<prop>

<id>200</id>

<title> test 2</title>

</prop>

</root>

注意要将 encoding设为gb2312格式,我一开始设置的是utf-8,结果遇到在程序里

写入中文没问题, 但在读出该中文时却有异常,把后面的 </ 符号也当作值读出来

了,后来和一同事讨论后才知道是编码问题。

=======================================================

string filefullPath = 要读取xml文件的绝对路径

//创建文件对象

TiXmlDocument * myDocument = new TiXmlDocument(filefullPath.c_str());

//加载文件数据

myDocument->LoadFile();

//获取根节点

TiXmlElement *RootElement = myDocument->RootElement();

=======================================================

以下是简单的读取操作:

//第一个子节点 TiXmlElement *CurrentPerson = RootElement->FirstChildElement();

//遍历获取指定节点数据 while(CurrentPerson) {

//子节点第一个属性 id TiXmlElement *IdElement = CurrentPerson->FirstChildElement();

//第一个属性的值 int nodeID = atoi(IdElement->FirstChild()->Value());

//子节点第二个属性 title TiXmlElement *TitleElement = IdElement->NextSiblingElement();

//第二个属性的值 CString nodeTitle = TitleElement->FirstChild()->Value();

.....................

如果还有后续属性,依次读取

.....................

维护读出的数据

.....................

//指向下一节点 CurrentPerson = CurrentPerson->NextSiblingElement(); } =======================================================

以下是增加xml记录的操作,例如要增加 id 为 300,title 为 test3 的记录:

//创建节点对象 TiXmlElement *PersonElement = new TiXmlElement("prop");

//链接到根节点 RootElement ->LinkEndChild(PersonElement);

//创建节点对象的属性节点 TiXmlElement *IdElement = new TiXmlElement("id"); TiXmlElement *TitleElement =new TiXmlElement("title");

//将属性节点链接到子节点 PersonElement->LinkEndChild(IdElement); PersonElement->LinkEndChild(TitleElement);

//创建属性对应数值对象

TiXmlText *idContent = new TiXmlText("300");

TiXmlText *titleContent = new TiXmlText("test3");

//将数值对象关联到属性节点 IdElement->LinkEndChild(idContent); TitleElement->LinkEndChild(titleContent);

//保存到文件 myDocument->SaveFile(m_filefullPath.c_str());

=======================================================

以下是删除记录操作,例如要删除id为300 的记录:

//获取当前要删除的节点 TiXmlElement * childElement = 根据id从自己读取时缓存的数据中获得

//从根节点移除子节点 RootElement->RemoveChild(childElement);

//保存文件 myDocument->SaveFile(m_filefullPath.c_str());

=======================================================