包含TinyXml库
测试代码
#include <iostream>
#include <string>
#include "xml/tinyxml.h"
using namespace std;
void readXML()
{
// XML文档
TiXmlDocument doc;
// 加载XML文档
if (!doc.LoadFile("tms.xml"))
{
cerr << doc.ErrorDesc() << endl;
}
// 定义根节点变量并赋值为文档的第一个根节点
TiXmlElement *root = doc.FirstChildElement();
// 如果没有找到根节点,说明是空XML文档或者非XML文档
if (root == NULL)
{
cerr << "Failed to load file: No root element." << endl;
// 清理内存
doc.Clear();
}
// 遍历子节点
for (TiXmlElement *elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement())
{
// 获取元素名
string elemName = elem->Value();
const char *attr;
// 获取元素属性值
attr = elem->Attribute("priority");
if (strcmp(attr, "1") == 0)
{
// 还有子节点bold,bold下还有一段文本
TiXmlElement *e1 = elem->FirstChildElement("bold");
// bold下只有一段文本元素,所以,只获取一次子元素就好
TiXmlNode *e2 = e1->FirstChild();
// 输出子文本元素值
cout << "priority=1\t" << e2->ToText()->Value() << endl;
}
else if (strcmp(attr, "2") == 0)
{
// 属性值为"2"的下面只有一段文本
TiXmlNode *e1 = elem->FirstChild();
// 取出来并输出
cout << "priority=2\t" << e1->ToText()->Value() << endl;
}
}
// 清理内存
doc.Clear();
}
void writeXML()
{
// XML文档
TiXmlDocument doc;
// 根节点(根节点名字随意)
TiXmlElement *root = new TiXmlElement("root");
// 在文档中加入一个根节点
doc.LinkEndChild(root);
// 第一个元素
TiXmlElement *element1 = new TiXmlElement("Element1");
// 在根节点下加入子元素
root->LinkEndChild(element1);
// 添加子元素属性
element1->SetAttribute("attribute1", "some value");
// 第二个元素
TiXmlElement *element2 = new TiXmlElement("Element2");
// 在根节点下再次加入元素
root->LinkEndChild(element2);
// 设置该元素第一个属性值
element2->SetAttribute("attribute2", "2");
// 设置该元素第二个属性值
element2->SetAttribute("attribute3", "3");
// 第三个元素
TiXmlElement *element3 = new TiXmlElement("Element3");
// 注意:这是在第二个元素(element2)下加入元素(element3)
element2->LinkEndChild(element3);
// 设置该元素属性值
element3->SetAttribute("attribute4", "4");
// 文本元素
TiXmlText *text = new TiXmlText("Some text.");
// 在第二个元素下加入文本
element2->LinkEndChild(text);
// 保存文档
bool sucess = doc.SaveFile("b.xml");
// 清理内存
doc.Clear();
}
int main(void)
{
readXML();
writeXML();
return 0;
}