C++解析XML文件

包含TinyXml库

下载tinyxml

测试代码

#include 
#include 
#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;
}

你可能感兴趣的:(C++,c++,xml,开发语言)