Qt之XML
http://blog.csdn.net/liang19890820/article/details/52805902 简述XML(EXtensible Markup Language - 可扩展标记语言)是一种用于记录多种数据类型的标记语言。使用 XML 可以将各类型的文档定义为容易读取的格式,便于用户读取。而且,在应用程序中使用 XML,可以轻松实现数据交换。
使用 XML 模块要链接到 XML 模块,需要在 qmake 项目文件 .pro 中添加: QT += xml
包含模块中类的定义,使用: #include <QtXml>
XML 的访问方式Qt 提供了两种访问 XML 文档的方式:DOM 和 SAX。
DOMDOM Level 2 是用于 XML 接口的一个 W3C 推荐标准,将 XML 文档的组成映射为一个树结构。DOM Level 2 的规范可以在http://www.w3.org/DOM/上找到。 DOM 提供了一个访问和更改 XML 文件内容和结构的接口。它创建了一个文档的分层视图(树视图),因此,与 SAX2 接口相反,在解析之后,文档的对象模型常驻在内存中,这使得操作变得更加容易。 Qt 为 DOM 提供了用于操作 XML 的多种 C++类,均以 QDom 开头:
QDom 类通常使用如下: QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly))
return;
if (!doc.setContent(&file)) {
file.close();
return;
}
file.close();
// 打印出作为最外层元素的所有直接子元素的元素名称
QDomElement docElem = doc.documentElement();
QDomNode n = docElem.firstChild();
while(!n.isNull()) {
QDomElement e = n.toElement(); // 尝试将节点转换为元素
if(!e.isNull()) {
cout << qPrintable(e.tagName()) << endl; // 节点真的是一个元素
}
n = n.nextSibling();
}
// 这里,我们在文档的末尾添加一个新元素
QDomElement elem = doc.createElement("img");
elem.setAttribute("src","myimage.png");
docElem.appendChild(elem);
一旦 doc 和 elem 超出范围,代表 XML 文档的整个内部树被删除。 要使用 DOM 创建文档,请使用如下代码: QDomDocument doc("MyML");
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);
QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);
QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);
QString xml = doc.toString();
有关文档对象模型的更多信息,请参阅文档对象模型(DOM)Level 1和evel 2 Core核心规范。 SAXSAX 是用于 XML 解析器的基于事件的标准接口。XML 类的设计遵循SAX2 Java interface,名称适合 Qt 的命名约定。对于任何使用 SAX2 的人来说,使用 Qt XML 类应该非常容易。 SAX2 介绍SAX2 接口是一种事件驱动的机制,能够为用户提供文档信息。这里提到的“事件”意味着解析器报告的东西。例如,它遇到了一个开始标记,或者结束标记等。 为了使它不那么抽象,考虑以下示例: <quote>A quotation</quote>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |