想要更多了解,请点击下面链接:
转自:http://www.firedragonpzy.com.cn/index.php/archives/3588
这里我只说明一下如何使用,那原文章的例子来说:
要读取的XML文件如下:
<Persons>
<Person ID=”1″>
<name>周星星</name>
<age>20</age>
</Person>
<Person ID=”2″>
<name>白晶晶</name>
<age>18</age>
</Person>
</Persons>
读取XML:
//创建一个XML的文档对象。
TiXmlDocument *myDocument = new TiXmlDocument("填上你的Xml文件名");
myDocument->LoadFile();
//获得根元素,即Persons。
TiXmlElement *RootElement = myDocument.RootElement();
//输出根元素名称,即输出Persons。
cout << RootElement->Value() << endl;
//获得第一个Person节点。
TiXmlElement *FirstPerson = RootElement->FirstChildElement();
//获得第一个Person的name节点和age节点和ID属性。
TiXmlElement *NameElement = FirstPerson->FirstChildElement();
TiXmlElement *AgeElement = NameElement->NextSiblingElement();
TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
//输出第一个Person的name内容,即周星星;age内容,即20;ID属性,即1。
cout << NameElement->FirstChild()->Value << endl;
cout << AgeElement->FirstChild()->Value << endl;
cout << IDAttribute->Value() << endl;
另外一种XML格式:
<include>
<data taskId="1" taskName="捕鱼任务" fish_id="1" eventType="1" taskTime="150" needNum="30" rewardGold="100" rewardExp="100"/>
<data taskId="2" taskName="捕鱼任务" fish_id="1" eventType="1" taskTime="180" needNum="40" rewardGold="100" rewardExp="100"/>
<data taskId="3" taskName="捕鱼任务" fish_id="2" eventType="1" taskTime="180" needNum="20" rewardGold="100" rewardExp="120"/> </include>
这样的XML读取如下:
tinyxml2::XMLDocument doc;//创建一个XML的文档对象
if(!CommonFunc::loadInnerDictFile(doc, "你的XML文件")){
return 1;
}
tinyxml2::XMLElement * curNode = doc.RootElement()->FirstChildElement("data");//获取根元素名称
while(curNode){
TaskInfo *info = new TaskInfo();
info->id = curNode->IntAttribute("taskId");
info->taskName = curNode->Attribute("taskName");
info->evenType = curNode->IntAttribute("eventType");
info->fishId = curNode->IntAttribute("fish_id");
info->taskTime = curNode->IntAttribute("taskTime");
info->needCount = curNode->IntAttribute("needNum");
info->rewardGold = curNode->IntAttribute("rewardGold");
info->rewardExp = curNode->IntAttribute("rewardExp");
vector<TaskInfo*>::iterator iter = m_taskInfos.begin();
for (; iter != m_taskInfos.end(); iter++)
{
if ((*iter)->id > info->id)
{
break;
}
}
//把解析的第一排数据放入Vector容器中
m_taskInfos.insert(iter, 1, info);
//解析第二排数据
curNode = curNode->NextSiblingElement("data");