IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 使用tinyxml操作(增加、修改、删除)XML文件 -> 正文阅读

[C++知识库]使用tinyxml操作(增加、修改、删除)XML文件

DisposeXMLFile.h

#include "tinyxml.h"
#include <string>

using namespace std;

class DisposeXMLFile
{
public:
	DisposeXMLFile();
	~DisposeXMLFile();

	void createXMLFile();
	void addXMLInfo();
	void modifyNodeValue(TiXmlElement *pParentNodeElet, const string strChildNodeName, const string strValue);//修改节点值
	void deleteNode(TiXmlElement *pParentNodeElet, const string strChildNodeName);//删除节点
	TiXmlElement *findNode(TiXmlElement *pNode, const string nodeName);//根据节点名,查找父节点中子节点是否存在
	TiXmlDocument *getXmlDocument();
private:
	TiXmlDocument *m_pDocument;//创建XML文档指针
	TiXmlDeclaration *m_pDeclaration;//声明XML
};

DisposeXMLFile.cpp

#include "DisposeXMLFile.h"
#include <iostream>
#include <vector>

using namespace std;
const char *g_strXMLFolder = "plan.xml";

DisposeXMLFile::DisposeXMLFile()
{
	m_pDocument = nullptr;
	m_pDeclaration = nullptr;
}

DisposeXMLFile::~DisposeXMLFile()
{
	if (nullptr != m_pDocument)
		delete m_pDocument;
}

TiXmlDocument *DisposeXMLFile::getXmlDocument()
{
	return m_pDocument;
}

创建XML文件

void DisposeXMLFile::createXMLFile()
{
	m_pDocument = new TiXmlDocument(g_strXMLFolder);
	if (nullptr == m_pDocument)
	{
		return;
	}
	
	//声明XML,例如:<?xml version="1.0" encoding="UTF-8" ?>
	m_pDeclaration = new TiXmlDeclaration("1.0", "UTF-8", "");
	if (nullptr == m_pDeclaration)
	{
		return;
	}
	m_pDocument->LinkEndChild(m_pDeclaration);
}

添加XML内容

void DisposeXMLFile::addXMLInfo()
{
	//创建根节点
	string strXMLName = g_strXMLFolder;
	string strRootName = (strXMLName.substr(0, strXMLName.find(".")));//根节点元素名为文件名去掉.xml
	TiXmlElement *pRoot = new TiXmlElement(strRootName.c_str());
	if (nullptr == pRoot)
	{
		return;
	}
	m_pDocument->LinkEndChild(pRoot);

	//创建VERSION子节点
	TiXmlElement *pVersion = new TiXmlElement("VERSION");
	TiXmlText *pVersionText = new TiXmlText("1.0.0.0");
	pVersion->LinkEndChild(pVersionText);

	//创建IMAGESET_LIST子节点
	TiXmlElement *pImagesetList = new TiXmlElement("IMAGESET_LIST");

	//COUNT节点
	TiXmlElement *pCount = new TiXmlElement("COUNT");
	TiXmlText *pCountText = new TiXmlText("3");
	pCount->LinkEndChild(pCountText);

	//IMAGE_LIST节点
	TiXmlElement *pImageList = new TiXmlElement("IMAGE_LIST");

	TiXmlElement *pImageOne = new TiXmlElement("IMAGE");
	TiXmlText *pImageOneText = new TiXmlText("000000");
	pImageOne->LinkEndChild(pImageOneText);

	TiXmlElement *pImageTwo = new TiXmlElement("IMAGE");
	TiXmlText *pImageTwoText = new TiXmlText("111111");
	pImageTwo->LinkEndChild(pImageTwoText);

	TiXmlElement *pImageThree = new TiXmlElement("IMAGE");
	TiXmlText *pImageThreeText = new TiXmlText("222222");
	pImageThree->LinkEndChild(pImageThreeText);

	//关联IMAGE_LIST根节点,成为其子节点
	pImageList->LinkEndChild(pImageOne);
	pImageList->LinkEndChild(pImageTwo);
	pImageList->LinkEndChild(pImageThree);

	//关联IMAGESET_LIST根节点,成为其子节点
	pImagesetList->LinkEndChild(pCount);
	pImagesetList->LinkEndChild(pImageList);

	//关联PLAN根节点,成为其子节点
	pRoot->LinkEndChild(pVersion);
	pRoot->LinkEndChild(pImagesetList);

	m_pDocument->SaveFile(g_strXMLFolder);
}

添加XML内容后效果

在这里插入图片描述

修改节点文本

void DisposeXMLFile::modifyNodeValue(TiXmlElement *pParentNodeElet, const string strChildNodeName, const string strValue)
{
	TiXmlElement *pChildNode = findNode(pParentNodeElet, strChildNodeName);
	if (nullptr == pChildNode)
	{
		return;
	}

	TiXmlText *pText = new TiXmlText(strValue.c_str());

	//先将节点值清空
	pChildNode->Clear();
	pChildNode->LinkEndChild(pText);

	m_pDocument->SaveFile(g_strXMLFolder);
}

修改节点文本后效果

在这里插入图片描述

删除节点

void DisposeXMLFile::deleteNode(TiXmlElement *pParentNodeElet, const string strChildNodeName)
{
	TiXmlElement *pChildNode = findNode(pParentNodeElet, strChildNodeName);
	if (nullptr == pChildNode)
	{
		return;
	}

	TiXmlNode *parent = pChildNode->Parent();//找到该节点的父节点
	if (nullptr == parent)
	{
		return;
	}

	TiXmlElement *parentElem = parent->ToElement();
	if (nullptr == parentElem)
	{
		return;
	}

	parentElem->RemoveChild(pChildNode);
	m_pDocument->SaveFile(g_strXMLFolder);
}

删除节点后效果

在这里插入图片描述

//根据节点名,查找父节点中子节点是否存在
TiXmlElement *DisposeXMLFile::findNode(TiXmlElement *pNode, const string strNodeName)
{
	TiXmlElement *p = pNode;
	for (p = p->FirstChildElement(); p != nullptr; p = p->NextSiblingElement())
	{
		const char *value = p->Value();
		if (strcmp(p->Value(), strNodeName.c_str()) == 0)
		{
			return p;
		}
	}

	return nullptr;
}

int main()
{
	DisposeXMLFile xmlFile;
	//创建XML
	xmlFile.createXMLFile();
	
	//添加XML内容
	xmlFile.addXMLInfo();

	TiXmlDocument *pXMLDcument = xmlFile.getXmlDocument();
	pXMLDcument->LoadFile(g_strXMLFolder);
	TiXmlElement *xmlRoot = pXMLDcument->RootElement(); // 找根节点

	//修改节点文本
	string strValue = "10";//将COUNT节点值修改为10
	TiXmlElement *nodeImagesetListElem = xmlRoot->FirstChildElement("IMAGESET_LIST");
	xmlFile.modifyNodeValue(nodeImagesetListElem, "COUNT", strValue);

	//删除节点
	TiXmlElement* nodeImageListElem = xmlRoot->FirstChildElement("IMAGESET_LIST");
	TiXmlElement* nodeCountElem = xmlRoot->FirstChildElement("IMAGESET_LIST");
	xmlFile.deleteNode(nodeImageListElem,"IMAGE_LIST" );
	xmlFile.deleteNode(nodeImageListElem, "COUNT");

   return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:05:26  更:2022-03-30 18:08:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:45:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码