class QXmlStreamWriter#

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

概述#

方法#

注释

请注意,此文档可能包含自动从 C++ 转换为 Python 的代码片段。我们始终欢迎对代码片段的翻译做出贡献。如果您发现翻译有问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建票据来告诉我们。

详细描述#

警告

本节包含自动从 C++ 转换为 Python 的代码片段,可能包含错误。

QXmlStreamWriter 是用于写入 XML 的对应的类,它与 QXmlStreamReader 类相似。它操作的是一个通过 setDevice() 指定的 QIODevice。API 简洁直接:为每个要写入的 XML 标记或事件,编写器提供一个专门的功能。

您使用 writeStartDocument() 开始文档,用 writeEndDocument() 结束文档。这将隐式关闭所有未关闭的标签。

元素标签通过 writeStartElement() 打开,随后可以跟着 writeAttribute()writeAttributes(),然后写入元素内容,最后用 writeEndElement() 关闭。可以使用简短的形式 writeEmptyElement() 来写入空元素,然后跟 writeAttributes()

元素内容可以是字符、实体引用或嵌套元素。它使用 writeCharacters() 写入,该函数也会处理所有不允许的字符和字符序列的转义,或者使用 writeEntityReference() 或连续调用 writeStartElement()。可以用来写入仅包含文本的终端元素的一个便利方法 writeTextElement()

以下代码片段展示了如何使用该类的基本用法来以缩进的方式格式化写入 XML

stream = QXmlStreamWriter(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()。XML流链通过 writeCurrentToken() 支持。

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

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

QXmlStream 书签示例 解释了如何使用流写入器编写一个先前由 QXmlStreamReader 读取的XML书签文件(XBEL)。

__init__(array)#
参数:

arrayQByteArray

构建一个写入到数组的流写入器。这与创建一个在 QBuffer 设备上操作的自定义 XML 写入器的操作相同,该设备最终在 array 上操作。

__init__()

构建一个流写入器。

参见

setDevice()

__init__(device)
参数:

deviceQIODevice

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

autoFormatting()#
返回类型::

bool

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

autoFormattingIndent()#
返回类型::

int

device()#
返回类型::

QIODevice

返回与 QXmlStreamWriter 关联的当前设备,如果尚未分配设备,则返回 None。

参见

setDevice()

hasError()#
返回类型::

bool

如果写入失败,则返回 true。

如果底层设备写入失败,或者要写入的数据包含无效字符,则可能会发生这种情况。

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

setAutoFormatting(arg__1)#
参数:

arg__1 – bool

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

默认值为 false。

setAutoFormattingIndent(spacesOrTabs)#
参数:

spacesOrTabs – int

setDevice(device)#
参数:

deviceQIODevice

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

参见

device()

writeAttribute(namespaceUri, name, value)#
参数:
  • namespaceUri – str

  • name – str

  • value – str

写入名为name且有value的属性,且具有指定的namespaceUri的前缀。如果此命名空间尚未声明,QXmlStreamWriter将为它生成命名空间声明。

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeAttribute(qualifiedName, value)
参数:
  • qualifiedName – str

  • value – str

这是一个重载函数。

写入具有qualifiedNamevalue的属性。

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeAttribute(attribute)
参数:

attributeQXmlStreamAttribute

这是一个重载函数。

写入attribute

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

writeAttributes(attributes)#
参数:

attributesQXmlStreamAttributes

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

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

writeCDATA(text)#
参数:

text – 字符串

text 写入 CDATA 部分。如果 text 包含禁止的字符序列 "]]>",则将其分成不同的 CDATA 部分。

此函数主要存在于完整性的考虑。通常您不需要使用它,因为 writeCharacters() 会自动转义所有非内容字符。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeCharacters(text)#
参数:

text – 字符串

写入 text。字符“<”,“&”,和“”被转义为实体引用“&lt;”,“&amp;”和“&quot;”。为了防止禁止的序列“]]>”,“>”也被转义为“&gt;”。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeComment(text)#
参数:

text – 字符串

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeCurrentToken(reader)#
参数:

readerQXmlStreamReader

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

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

参见

tokenType()

writeDTD(dtd)#
参数:

dtd – 字符串

写入一个 DTD 部分。这里的 dtd 代表来自 XML 1.0 规范的整个 doctypedecl 生成。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeDefaultNamespace(namespaceUri)#
参数:

namespaceUri – str

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

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

请注意,http://www.w3.org/XML/1998/namespace(绑定到 xmlns)和 http://www.w3.org/2000/xmlns/(绑定到 xml)这两个命名空间根据定义不能声明为默认。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeEmptyElement(namespaceUri, name)#
参数:
  • namespaceUri – str

  • name – str

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeEmptyElement(qualifiedName)
参数:

qualifiedName – str

这是一个重载函数。

写入具有限定名 qualifiedName 的空元素。随后的 writeAttribute() 调用将为该元素添加属性。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeEndDocument()#

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

writeEndElement()#

关闭上一个起始元素。

writeEntityReference(name)#
参数:

name – str

将实体引用 name 写入流中,如“&``name``;”。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeNamespace(namespaceUri[, prefix={}])#
参数:
  • namespaceUri – str

  • prefix – str

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

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

注意,前缀 xml 既是预定义的,也是保留给 http://www.w3.org/XML/1998/namespace 的,因此不能绑定到任何其他前缀。前缀 xmlns 和其 URI http://www.w3.org/2000/xmlns/ 用于命名空间机制本身,因此在声明中是绝对禁止的。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeProcessingInstruction(target[, data={}])#
参数:
  • target – str

  • data – str

写入带有targetdata的XML处理指令,其中data不得包含序列“?=>”。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeStartDocument()#

这是一个重载函数。

写入XML版本号为“1.0”的文档开始。

writeStartDocument(version)
参数:

version - 字符串

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeStartDocument(version, standalone)
参数:
  • version - 字符串

  • standalone - 布尔值

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeStartElement(namespaceUri, name)#
参数:
  • namespaceUri – str

  • name – str

写入带有name的起始元素,并加上指定的前缀namespaceUri。如果尚未声明命名空间,QXmlStreamWriter将为此生成命名空间声明。后续调用writeAttribute()将为该元素添加属性。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeStartElement(qualifiedName)
参数:

qualifiedName – str

这是一个重载函数。

写入带有qualifiedName的起始元素。后续调用writeAttribute()将为该元素添加属性。

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeTextElement(namespaceUri, name, text)#
参数:
  • namespaceUri – str

  • name – str

  • text – 字符串

警告

本节包含自动从 C++ 转换为 Python 的代码片段,可能包含错误。

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

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

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

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView

writeTextElement(qualifiedName, text)
参数:
  • qualifiedName – str

  • text – 字符串

警告

本节包含自动从 C++ 转换为 Python 的代码片段,可能包含错误。

这是一个重载函数。

qualifiedNametext 写入文本元素。

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

writeStartElement(qualifiedName)
writeCharacters(text)
writeEndElement()

注释

在6.5之前的Qt版本中,此函数接受QString而不是QAnyStringView