示例

不用考虑XML的编码格式。

针对每一层标签分析,产生树形结构,按照标签结构分析。

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDomElement>
#include <QDebug>

void ReadXml()
{
	//打开或创建文件
	QFile file("D:/JBXML/teachers.xml"); //相对路径、绝对路径、资源路径都行
	if (!file.open(QFile::ReadOnly))
		return;

	QDomDocument doc;
	if (!doc.setContent(&file))
	{
		file.close();
		return;
	}
	file.close();

	QDomElement root = doc.documentElement(); //返回根节点
	qDebug() << root.nodeName();
	QDomNode node = root.firstChild(); //获得第一个子节点
	while (!node.isNull())  //如果节点不空
	{
		if (node.isElement()) //如果节点是元素
		{
			QDomElement e = node.toElement(); //转换为元素,注意元素和节点是两个数据结构,其实差不多
			qDebug() << e.tagName() << " " << e.attribute("id") << " " << e.attribute("time"); //打印键值对,tagName和nodeName是一个东西
			QDomNodeList list = e.childNodes();
			for (int i = 0; i < list.count(); i++) //遍历子元素,count和size都可以用,可用于标签数计数
			{
				QDomNode n = list.at(i);
				if (node.isElement())
					qDebug() << n.nodeName() << ":" << n.toElement().text();
			}
		}
		node = node.nextSibling(); //下一个兄弟节点,nextSiblingElement()是下一个兄弟元素,都差不多
	}

}


int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	ReadXml();
	return a.exec();
}

在这里插入图片描述
难以理解,把QDomElement当做QDomNode就可以了。

在分析的时候,这两个代表相同的东西,

从算法角度说,Node是树形结构的解析;

从XML和HTML等角度说,这是一个标签tag;

可以忽略XML文件的encoding格式,不管是utf-8还是GBK,都可以当做节点,进行解析。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐