C++ 读取xml文件

1.下载TinyXml(https://www.sourceforge.net/projects/tinyxml/)库

2.将tinyxml文件目录下的tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp等放入工程目录下

3.使用的xml范例如下

<ToDo>
    <Item priority="1"> 
        <bold>
            Book store!
        </bold>
    </Item>
    <Item priority="2"> 
        book1
    </Item>
    <Item priority="2"> 
        book2
    </Item>
</ToDo>

4.读取代码如下

a)申明TiXmlDocument 类型变量存储xml文件

b)申明TiXmlElement指针指向元素

c)申明TiXmlNode指针指向元素存储的文本

d)Value()方法返回元素名或文本

#include "tinyxml.h"
#include <iostream>
#include <string>
using namespace std;
void loadXML(){
	TiXmlDocument doc;//申明一个文档类型变量,用来存储读取的xml文档
	if (!doc.LoadFile("a.xml"))	//检测xml文档是否存在
	{
		cerr << doc.ErrorDesc() << endl;
	}
	TiXmlElement* root = doc.FirstChildElement();//指向xml文档的根元素
	if (root == NULL)//检测根元素存在性		
	{
		cerr << "Failed to load file: No root element." << endl;
		doc.Clear();
	}
	//elem指向根的第一个孩子元素
	for (TiXmlElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement()){
		const char* arr = elem->Attribute("priority"); //通过元素属性寻找元素
		if (strcmp(arr, "1") == 0){	
			TiXmlElement* elem1 = elem->FirstChildElement();
			TiXmlNode* node = elem1->FirstChild();//node指向elem1元素下的文本
			cout << node->Value() << endl;
		}
		if (strcmp(elem->Value(), "Item1") == 0){ //也可以通过元素名寻找元素
			TiXmlNode* node = elem->FirstChild();
			cout << node->Value() << endl;
		}
	}
}
int main(int argc, char* argv[])
{
	loadXML();
	system("pause");
	return 0;
}

5.运行结果

Book store!
book2

请按任意键继续. . .

以上。。。

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
C++中,可以使用第三方库来读取和解析XML文件,比如 `pugixml`。以下是使用 `pugixml` 库读取XML文件的示例代码: 首先,需要下载并安装 `pugixml` 库。可以从 https://pugixml.org/ 下载源代码,并将 `pugixml.hpp` 和 `pugixml.cpp` 文件添加到你的C++项目中。 接下来,可以使用以下示例代码来读取XML文件: ```cpp #include <iostream> #include "pugixml.hpp" int main() { pugi::xml_document doc; if (!doc.load_file("data.xml")) { std::cout << "Failed to load 'data.xml'" << std::endl; return 1; } // 获取根节点 pugi::xml_node root = doc.child("root"); // 遍历子节点 for (pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) { std::cout << "Node name: " << node.name() << std::endl; // 获取节点属性 std::cout << "Attribute value: " << node.attribute("attribute_name").value() << std::endl; // 获取节点文本内容 std::cout << "Node value: " << node.child_value() << std::endl; // 获取子节点 pugi::xml_node childNode = node.child("child_node"); if (childNode) { // 处理子节点 } } return 0; } ``` 确保将 `data.xml` 替换为你要读取的实际XML文件的路径。使用 `load_file` 函数可以加载XML文件,然后可以使用 `child`、`attribute`、`child_value` 等函数来获取节点的名称、属性和文本内容。 请注意,上述示例假设你已经将 `pugixml.hpp` 和 `pugixml.cpp` 文件添加到你的项目中,并且已经正确配置了编译器和链接器,以便能够正确编译和运行代码。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值