QT 写XML文件

前端之家收集整理的这篇文章主要介绍了QT 写XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前面几章我们讨论了读取 XML 文档的三种方法。虽然各有千秋,但是 Qt 推荐的是使用 QXmlStreamReader。与此同时,许多应用程序不仅需要读取 XML,还需要写入 XML。为此,Qt 同样提供了三种方法

  1. 使用 QXmlStreamWriter;
  2. 构造一个 DOM 树,然后掉其 save() 函数
  3. 使用 QString 手动生成 XML。

可以看出,无论我们使用哪种读取方式,这几种写入的方法都与此无关。这是因为 W3C 仅仅定义了如何处理 XML 文档,并没有给出如何生成 XML 文档的标准方法(尽管当我们使用 DOM 方式读取的时候,依旧可以使用同样的 DOM 树写入)。

如同 Qt 所推荐的,我们也推荐使用 QXmlStreamWriter 生成 XML 文档。这个类帮助我们做了很多工作,比如特殊字符的转义。接下来我们使用 QXmlStreamWriter 将前面几章使用的 XML 文档生成出来:

Language:C++ (Qt)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
QFile file("bookindex.xml");
if (!file.open(QFile::WriteOnly | Text) {
    qDebug<< "Error: Cannot write file: "
             << qPrintable(file.errorString;
    return false}

QXmlStreamWriter xmlWriter&file;
xmlWriter.setAutoFormattingtruewriteStartDocumentwriteStartElement"bookindex""entry"writeAttribute"term", "sidebearings"writeTextElement"page""10""34-35""307-308"writeEndElement"subtraction""of pictures""115""224""of vectors""9"writeEndDocument;
file.closeerror}
// ...

首先,我们以只写方式创建一个文件。然后基于该文件我们创建了 QXmlStreamWriter 对象。setAutoFormatting() 函数告诉 QXmlStreamWriter 要有格式输出,也就是会有标签的缩进。我们也可以使用 QXmlStreamWriter::setAutoFormattingIndent() 设置每个缩进所需要的空格数。接下来是一系列以 write 开始的函数。这些函数就是真正输出时需要用到的。注意这些函数以 write 开始,有 Start 和 End 两个对应的名字。正如其名字暗示那样,一个用于写入开始标签,一个用于写入结束标签。writeStartDocument() 开始进行 XML 文档的输出。这个函数会写下

Language:XML
0
<?xml version="1.0" encoding="UTF-8"?>

一行。与 writeStartDocument() 相对应的是最后的 writeEndDocument(),告诉 QXmlStreamWriter,这个 XML 文档已经写完。下面我们拿出一段典型的代码

0 1 2 3
xmlWriter."entry""term""of vectors""page""9";

显然,这里我们首先写下一个 entry 的开始标签,然后给这个标签一个属性 term,属性值是 of vectors。writeTextElement() 函数则会输出一个仅包含文本内容标签。最后写入这个标签关闭标签。这段代码输出结果就是:

Language:XML
0
1
2
<entry term=>
    <page>9</page>
</entry>

其余部分与此类似,这里不再赘述。这样,我们就输出了一个与前面章节所使用的相同的 XML 文档:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<bookindex>
    
        >10>
        >34-35>307-308
            >115
            >224
        </bookindex 尽管我们推荐使用 QXmlStreamWriter 生成 XML 文档,但是如果现在已经有了 DOM 树,显然直接调用 QDomDocument::save() 函数更为方便。在某些情况下,我们需要手动生成 XML 文档,比如通过 QTextStream:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
//!!! Qt4
QTextStream out;
out.setCodec"UTF-8";
out << "<doc>\n"
    <<" <quote>"  Qtescape(quoteText"</translation>translationText\n";

//!!! Qt5
"UTF-8" quoteText.toHtmlEscapedtranslationText.;

这种办法是最原始的办法:我们直接除了字符串,把字符串拼接成 XML 文档。需要注意的是,quoteText 和 translationText 都需要转义,这是 XML 规范里面要求的,需要将文本中的 <,> 以及 & 进行转义。不过,转义函数在 Qt4 中是 Qt::escape(),而 Qt5 中则是 QString::toHtmlEscaped(),需要按需使用。

原文链接:https://www.f2er.com/xml/298047.html

猜你在找的XML相关文章