QXmlStreamWriter 类

QXmlStreamWriter 类提供了一个具有简单流式 API 的 XML 编写器。 更多...

头文件 #include <QXmlStreamWriter>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意:此类中所有函数都是 可重入的

属性

公共函数

QXmlStreamWriter()
QXmlStreamWriter(QIODevice *device)
QXmlStreamWriter(QByteArray *array)
QXmlStreamWriter(QString *string)
~QXmlStreamWriter()
boolautoFormatting() const
intautoFormattingIndent() const
QIODevice *device() const
boolhasError() const
voidsetAutoFormatting(bool enable)
voidsetAutoFormattingIndent(int spacesOrTabs)
voidsetDevice(QIODevice *device)
voidwriteAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value)
voidwriteAttribute(QAnyStringView qualifiedName, QAnyStringView value)
voidwriteAttribute(const QXmlStreamAttribute &attribute)
voidwriteAttributes(const QXmlStreamAttributes &attributes)
voidwriteCDATA(QAnyStringView text)
voidwriteCharacters(QAnyStringView text)
voidwriteComment(QAnyStringView text)
voidwriteCurrentToken(const QXmlStreamReader &reader)
voidwriteDTD(QAnyStringView dtd)
voidwriteDefaultNamespace(QAnyStringView namespaceUri)
voidwriteEmptyElement(QAnyStringView namespaceUri, QAnyStringView name)
voidwriteEmptyElement(QAnyStringView qualifiedName)
voidwriteEndDocument()
voidwriteEndElement()
voidwriteEntityReference(QAnyStringView name)
voidwriteNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {})
voidwriteProcessingInstruction(QAnyStringView target, QAnyStringView data = {})
voidwriteStartDocument(QAnyStringView version)
voidwriteStartDocument()
voidwriteStartDocument(QAnyStringView version, bool standalone)
voidwriteStartElement(QAnyStringView namespaceUri, QAnyStringView name)
voidwriteStartElement(QAnyStringView qualifiedName)
voidwriteTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text)
voidwriteTextElement(QAnyStringView qualifiedName, QAnyStringView text)

详细描述

QXmlStreamWriter 是用于写入 XML 的 QXmlStreamReader 的对应物。与相关类类似,它操作使用 setDevice() 指定的 QIODevice。API 简洁直观:为每个要写入的 XML 标记或事件,编写器提供了一个专门的函数。

你可以使用 writeStartDocument() 开始文档,并用 writeEndDocument() 结束它。这会隐式关闭所有剩余的开放标签。

元素标签通过 writeStartElement() 打开,然后是 writeAttribute() 或 writeAttributes(),元素内容,最后用 writeEndElement() 结束。可以使用较短的 writeEmptyElement() 形式写入空元素,然后是 writeAttributes()。

元素内容可以是字符、实体引用或嵌套元素。它可以通过 writeCharacters() 来写入,该函数还负责转义所有禁止的字符和字符序列,writeEntityReference(),或后续对 writeStartElement() 的调用。可以使用方便的方法 writeTextElement() 来写入只包含文本的终端元素。

以下简短的代码片段展示了此类的基本使用,用于编写具有缩进的格式化 XML。

    QXmlStreamWriter stream(&output);
    stream.setAutoFormatting(true);
    stream.writeStartDocument();
    ...
    stream.writeStartElement("bookmark");
    stream.writeAttribute("href", "http://qt-project.org/");
    stream.writeTextElement("title", "Qt Project");
    stream.writeEndElement(); // bookmark
    ...
    stream.writeEndDocument();

QXmlStreamWriter 负责在命名空间前添加前缀,你只需在写入元素或属性时指定 namespaceUri 即可。如果你必须遵循某些前缀,可以通过使用 writeNamespace() 或 writeDefaultNamespace() 手动声明命名空间来强制写出器使用它们。或者,你可以绕过流编写器的命名空间支持,并使用重载方法,该方法接受一个有资格的名称代替。命名空间 http://www.w3.org/XML/1998/namespace 是隐含的,映射到前缀 xml

流编写器可以通过添加换行符和缩进来自动格式化生成的 XML 数据,使 XML 数据对于人来说是更可读的,并且对于大多数源代码管理系统来说更容易处理。此功能可以通过 autoFormatting 属性打开,并通过 autoFormattingIndent 属性进行自定义。

其他功能包括 writeCDATA()、writeComment()、writeProcessingInstruction() 和 writeDTD()。支持使用 writeCurrentToken() 连接 XML 流。

QXmlStreamWriter 总是使用 UTF-8 编码 XML。

如果在写入底层设备时发生错误,hasError() 开始返回 true,并且后续写入被忽略。

QXmlStream 书签示例说明了如何使用流编写器来写入之前由 QXmlStreamReader 读取的 XML 书签文件(XBEL)。

属性文档

autoFormatting : bool

此属性保存流写入器的自动格式化标志。

此属性控制流写入器是否自动格式化生成的 XML 数据。如果启用,写入器会自动在元素之间添加换行符和缩进(可忽略的空白)。自动格式的目的是将数据分割成多行,并提高供人类阅读的易读性。缩进深度可以通过 autoFormattingIndent 属性进行控制。

默认情况下,自动格式化是未启用的。

访问函数

boolautoFormatting() const
voidsetAutoFormatting(bool enable)

autoFormattingIndent : int

当自动格式化启用时,此属性保存用于缩进的空格或制表符的数量。正数表示空格,负数表示制表符。

默认缩进应为 4。

访问函数

intautoFormattingIndent() const
voidsetAutoFormattingIndent(int spacesOrTabs)

另请参阅 autoFormatting.

成员函数文档

QXmlStreamWriter::QXmlStreamWriter()

构建流写入器。

另请参阅 setDevice().

[显式构造函数] QXmlStreamWriter::QXmlStreamWriter(QIODevice *device)

构建一个写入到 device 的流写入器;

[显式构造函数] QXmlStreamWriter::QXmlStreamWriter(QByteArray *array)

构建一个写入到 array 的流写入器。这相当于创建一个操作 QBuffer 设备的 XML 写入器,该设备又操作 array

[显式构造函数] QXmlStreamWriter::QXmlStreamWriter(QString *string)

构建一个写入到 string 的流写入器。

[非异常抛出构造函数] QXmlStreamWriter::~QXmlStreamWriter()

析构函数。

bool QXmlStreamWriter::autoFormatting() const

如果启用自动格式化返回 true,否则返回 false

注意: autoFormatting 属性的 getter 函数。

另请参阅 setAutoFormatting().

QIODevice *QXmlStreamWriter::device() const

返回与 QXmlStreamWriter 相关的当前设备,如果没有分配设备,则返回 nullptr

另请参阅 setDevice().

bool QXmlStreamWriter::hasError() const

如果写入失败返回 true

这可能发生在流无法写入底层设备或要写入的数据包含无效字符时。

错误状态永远不会重置。错误发生后发生的写入可能会被忽略,即使错误条件已被清除。

void QXmlStreamWriter::setAutoFormatting(bool enable)

如果 enable 属性为 true,则启用自动格式化。否则禁用自动格式化。

默认值为 false

注意:这是属性 autoFormatting 的设置函数。

另请参阅:autoFormatting

void QXmlStreamWriter::setDevice(QIODevice *device)

设置当前设备为 device。如果你想要将流写入 QByteArray,你可以创建一个 QBuffer 设备。

另请参阅:device

void QXmlStreamWriter::writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value)

写入具有 namevalue 的属性,并在指定 namespaceUri 下进行前缀。如果命名空间尚未声明,QXmlStreamWriter 将为它生成一个命名空间声明。

此函数只能在调用 writeStartElement() 之后(在任何内容写入之前),或者调用 writeEmptyElement() 之后调用。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeAttribute(QAnyStringView qualifiedName, QAnyStringView value)

这是一个重载函数。

写入具有 qualifiedNamevalue 的属性。

此函数只能在调用 writeStartElement() 之后(在任何内容写入之前),或者调用 writeEmptyElement() 之后调用。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeAttribute(const QXmlStreamAttribute &attribute)

这是一个重载函数。

写入 attribute

此函数只能在调用 writeStartElement() 之后(在任何内容写入之前),或者调用 writeEmptyElement() 之后调用。

void QXmlStreamWriter::writeAttributes(const QXmlStreamAttributes &attributes)

写入属性向量 attributes。如果属性中引用的命名空间尚未声明,QXmlStreamWriter 将为它生成一个命名空间声明。

此函数只能在调用 writeStartElement() 之后(在任何内容写入之前),或者调用 writeEmptyElement() 之后调用。

另请参阅:writeAttribute() 和 writeNamespace

void QXmlStreamWriter::writeCDATA(QAnyStringView text)

text 作为 CDATA 部分。如果 text 包含禁止的字符序列 "]]>",它将被分成不同的 CDATA 部分。

此函数主要存在是为了完整性。通常,你不应该需要使用它,因为 writeCharacters() 会自动转义所有非内容字符。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeCharacters(QAnyStringView text)

写入 text。将字符 "<"、"&" 和 """ 转义为实体引用 "&lt;"、"&amp;" 和 "&quot;"。为了避免禁止的序列 "]]>",将 ">" 也转义为 "&gt;"。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

另请参阅:writeEntityReference

void QXmlStreamWriter::writeComment(QAnyStringView text)

文本 作为 XML 注释写入,其中 文本 必须不包含禁止的序列 -- 或以 - 结尾。请注意,XML 不提供任何方法来转义注释中的 -

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)

写入 reader 的当前状态。支持所有可能的有效状态。

此函数的目的是支持 XML 数据的链式处理。

另请参阅 QXmlStreamReader::tokenType().

void QXmlStreamWriter::writeDTD(QAnyStringView dtd)

写入 DTD 部分。 dtd 表示 XML 1.0 规范中 doctypedecl 生产的全部内容。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeDefaultNamespace(QAnyStringView namespaceUri)

namespaceUri 写入默认命名空间声明。

如果调用了 writeStartElement() 或 writeEmptyElement(),则声明应用于当前元素;否则应用于下一个子元素。

请注意,由于定义,以下命名空间不可能声明为默认值:http://www.w3.org/XML/1998/namespace(绑定到 xmlns)和 http://www.w3.org/2000/xmlns/(绑定到 xml)。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name)

写入带有 名称 的空元素,该名称带有指定的 namespaceUri 的前缀。如果没有声明命名空间,QXmlStreamWriter 将为其生成命名空间声明。后续对 writeAttribute() 的调用将添加属性到该元素。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

另请参阅 writeNamespace().

void QXmlStreamWriter::writeEmptyElement(QAnyStringView qualifiedName)

这是一个重载函数。

写入具有资格名称 qualifiedName 的空元素。后续对 writeAttribute() 的调用将添加属性到此元素。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeEndDocument()

关闭所有剩余的打开起始元素并写入换行符。

另请参阅 writeStartDocument().

void QXmlStreamWriter::writeEndElement()

关闭先前的起始元素。

另请参阅 writeStartElement().

void QXmlStreamWriter::writeEntityReference(QAnyStringView name)

将实体引用 名称 写入流,格式为 "&名称;"。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {})

使用 prefixnamespaceUri 写入命名空间声明。如果 prefix 为空,QXmlStreamWriter 将分配一个由字母 'n' 后跟数字组成的唯一的前缀。

如果调用了 writeStartElement() 或 writeEmptyElement(),则声明应用于当前元素;否则应用于下一个子元素。

请注意,前缀 xml 既是预定义的又是为 http://www.w3.org/XML/1998/namespace 保留的,它不能绑定到任何其他前缀。前缀 xmlns 及其 URI http://www.w3.org/2000/xmlns/ 用来实现命名空间机制本身,因此在声明中是完全禁止的。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {})

写入目标为 target 和数据 data 的 XML 处理指令。其中,data 中不得包含序列 "?>"。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeStartDocument(QAnyStringView version)

写入具有 XML 版本号 version 的文档开始。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

另请参阅 writeEndDocument

void QXmlStreamWriter::writeStartDocument()

这是一个重载函数。

使用 XML 版本号 "1.0" 写入文档开始。

另请参阅 writeEndDocument

void QXmlStreamWriter::writeStartDocument(QAnyStringView version, bool standalone)

写入具有 XML 版本号 version 和独立属性 standalone 的文档开始。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

另请参阅 writeEndDocument

void QXmlStreamWriter::writeStartElement(QAnyStringView namespaceUri, QAnyStringView name)

写入具有 name 的起始元素,该元素对应于指定的 namespaceUri。如果命名空间尚未声明,QXmlStreamWriter 将为其生成命名空间声明。随后的 writeAttribute() 调用将向该元素添加属性。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

另请参阅 writeNamespacewriteEndElementwriteEmptyElement

void QXmlStreamWriter::writeStartElement(QAnyStringView qualifiedName)

这是一个重载函数。

写入具有 qualifiedName 的起始元素。随后的 writeAttribute() 调用将向该元素添加属性。

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

另请参阅 writeEndElementwriteEmptyElement

void QXmlStreamWriter::writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text)

写入带有 name,指定 namespaceUri 的前缀和 text 的文本元素。如果命名空间尚未声明,QXmlStreamWriter 将为其生成命名空间声明。

这是一个方便的函数,相当于

        writeStartElement(namespaceUri, name);
        writeCharacters(text);
        writeEndElement();

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

void QXmlStreamWriter::writeTextElement(QAnyStringView qualifiedName, QAnyStringView text)

这是一个重载函数。

写入具有 qualifiedNametext 的文本元素。

这是一个方便的函数,相当于

        writeStartElement(qualifiedName);
        writeCharacters(text);
        writeEndElement();

注意:在 Qt 6.5 之前的版本中,此函数使用 QString,而不是 QAnyStringView

© 2024 Qt 公司有限公司。本问答及其相关内容均为各自所有者的版权所有。提供的文档受GNU 自由文档许可证版本 1.3的条款约束,由自由软件基金会发布。Qt 及其相关标志是芬兰以及全球其他地区Qt 公司的商标。所有其他商标均为各自所有者的财产。