QT开发应用程序(19)-- 读取XML文件

1、修改工程文件PRO属性

在工程文件设置中修改[Qt Modules] 中增加xml;
在这里插入图片描述或者直接修改pro文件:
加一行:QT+=xml

2、源程序

XML例:
把xml文件存入utf-8格式的文件中。(如果没有中文字符,文件存放格式可以忽略)

<?xml version="1.0" encoding="utf-8"?>
<classes info="test">
   <class class_name="english">
        <students> 50 </students>
		<classroom>A building, Room2022</classroom>
   </class>
   <class class_name="chemistry">
        <students> 50 </students>
		<classroom>B building, Room2023</classroom>
   </class>
</classes> 

#include <QDomDocument> // 文件头必须引入

void parsexml(QString file_name)
{
	if (file_name.isEmpty())
		return;

	QFile file(file_name);
	if (!file.open(QFile::ReadOnly | QFile::Text))
	{
		return;
	}

	QDomDocument document;
	QString error;
	int row = 0;
	int column = 0;
	if (!document.setContent(&file, false, &error, &row, &column))
	{
		return;
	}

	if (document.isNull())
	{
		return;
	}

	QDomElement root = document.documentElement();

	QString root_tag_name = root.tagName();
	if (root.hasAttribute("info")) // 判断是否有【info】属性值
	{
		QString name = root.attributeNode("info").value();// 取【info】属性值
	}

	QDomElement class_element = root.firstChildElement();// 取第1个子节点。
	if (class_element.isNull())
		return;

	QString tag_name = class_element.tagName();// 取元素的tag名。

	QString class_name = class_element.attributeNode("class_name").value();// 取元素【class_name】属性值

	//获取子节点
	QDomNodeList list = root.childNodes();
	int count = list.count();// 获取子节点个数
	for (int i = 0; i < count; i++)
	{
		QDomNode dom_node = list.item(i);
		QDomElement element = dom_node.toElement();
		QString element_tag_name = element.tagName(); // 取元素的节点名

		// 取元素的属值:下面两个函数是取属性值的方法
		QString name_1 = element.attributeNode("class_name").value();
		QString name_2 = element.attribute("class_name");

		//获取子节点
		QDomNodeList child_list = element.childNodes();
		int child_count = child_list.count();
		for (int j = 0; j < child_count; j++)
		{
			QDomNode child_dom_node = child_list.item(j);
			QDomElement child_element = child_dom_node.toElement();
			QString child_tag_name = child_element.tagName();// 取元素的节点名
			QString child__tag_value = child_element.text();// 取元素的属值
		}
	}
}

3、调用例子:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
	parsexml("d:\\test.xml"); // 注意文件存放位置,修改为实际的文件名和路径
	return a.exec();
}
发布了30 篇原创文章 · 获赞 9 · 访问量 921

猜你喜欢

转载自blog.csdn.net/x879014419/article/details/105193985
今日推荐