C++解析XML文件

包含TinyXml库

下载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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aspiretop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值