PySide6.QtCore.QXmlStreamWriter

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__()

构建一个流写入器。

另请参阅

setDevice()

__init__(array)
Parameters:

数组QByteArray

构造一个写入array的流写入器。这与创建一个操作在QBuffer设备上的xml写入器相同,该设备又操作在array上。

__init__(device)
Parameters:

设备QIODevice

构造一个流写入器,该写入器写入device;

autoFormatting()
Return type:

布尔

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

另请参阅

setAutoFormatting()

autoFormattingIndent()
Return type:

整数

device()
Return type:

QIODevice

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

另请参阅

setDevice()

hasError()
Return type:

布尔

如果写入失败,返回 true

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

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

setAutoFormatting(enable)
Parameters:

enable – 布尔值

如果enabletrue,则启用自动格式化,否则禁用。

默认值为false

另请参阅

autoFormatting()

setAutoFormattingIndent(spacesOrTabs)
Parameters:

spacesOrTabs – int

另请参阅

autoFormattingIndent()

setDevice(device)
Parameters:

设备QIODevice

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

另请参阅

device()

writeAttribute(attribute)
Parameters:

属性QXmlStreamAttribute

这是一个重载函数。

写入attribute

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

writeAttribute(qualifiedName, value)
Parameters:
  • qualifiedName – str

  • value – str

这是一个重载函数。

写入一个具有qualifiedNamevalue的属性。

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

注意

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

writeAttribute(namespaceUri, name, value)
Parameters:
  • namespaceUri – str

  • name – str

  • value – str

写入一个带有namevalue的属性,并为指定的namespaceUri添加前缀。如果命名空间尚未声明,QXmlStreamWriter将为其生成一个命名空间声明。

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

注意

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

writeAttributes(attributes)
Parameters:

属性QXmlStreamAttributes

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

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

writeCDATA(text)
Parameters:

文本 – str

text写入为CDATA部分。如果text包含禁止的字符序列“]]>”,它将被分割成不同的CDATA部分。

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

注意

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

writeCharacters(text)
Parameters:

文本 – str

写入 text。字符“<”、“&”和“””被转义为实体引用“<”、“&”和“"”。为了避免禁止的序列“]]>”,“>”也被转义为“>”。

注意

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

另请参阅

writeEntityReference()

writeComment(text)
Parameters:

文本 – str

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

注意

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

writeCurrentToken(reader)
Parameters:

readerQXmlStreamReader

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

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

另请参阅

tokenType()

writeDTD(dtd)
Parameters:

dtd – str

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

注意

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

writeDefaultNamespace(namespaceUri)
Parameters:

namespaceUri – str

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

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

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

注意

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

writeEmptyElement(qualifiedName)
Parameters:

qualifiedName – str

这是一个重载函数。

写入一个具有限定名称qualifiedName的空元素。后续对writeAttribute()的调用将为此元素添加属性。

注意

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

writeEmptyElement(namespaceUri, name)
Parameters:
  • namespaceUri – str

  • name – str

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

注意

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

另请参阅

writeNamespace()

writeEndDocument()

关闭所有剩余的开放开始元素并写入一个新行。

另请参阅

writeStartDocument()

writeEndElement()

关闭前一个开始元素。

另请参阅

writeStartElement()

writeEntityReference(name)
Parameters:

name – str

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

注意

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

writeNamespace(namespaceUri[, prefix={}])
Parameters:
  • namespaceUri – str

  • prefix – str

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

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

请注意,前缀 xml 是预定义的,并且保留给 http://www.w3.org/XML/1998/namespace,而该命名空间不能被绑定到任何其他前缀。前缀 xmlns 及其 URI http://www.w3.org/2000/xmlns/ 用于命名空间机制本身,因此在声明中完全禁止使用。

注意

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

writeProcessingInstruction(target[, data={}])
Parameters:
  • target – str

  • data – 字符串

使用targetdata写入一个XML处理指令,其中data不能包含序列“?>”。

注意

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

writeStartDocument()

这是一个重载函数。

写入一个以XML版本号“1.0”开头的文档。

另请参阅

writeEndDocument()

writeStartDocument(version)
Parameters:

版本 – str

写入一个以XML版本号version开头的文档。

注意

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

另请参阅

writeEndDocument()

writeStartDocument(version, standalone)
Parameters:
  • version – str

  • standalone – 布尔值

写入一个以XML版本号version和一个独立属性standalone开头的文档。

注意

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

另请参阅

writeEndDocument()

writeStartElement(qualifiedName)
Parameters:

qualifiedName – str

这是一个重载函数。

使用qualifiedName写入一个开始元素。后续对writeAttribute()的调用将为此元素添加属性。

注意

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

writeStartElement(namespaceUri, name)
Parameters:
  • namespaceUri – str

  • name – str

使用name写入一个开始元素,并为指定的namespaceUri添加前缀。如果尚未声明命名空间,QXmlStreamWriter将为其生成一个命名空间声明。后续调用writeAttribute()将向此元素添加属性。

注意

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

writeTextElement(qualifiedName, text)
Parameters:
  • qualifiedName – str

  • 文本 – str

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

这是一个重载函数。

使用qualifiedNametext写入一个文本元素。

这是一个方便的函数,等同于:

writeStartElement(qualifiedName)
writeCharacters(text)
writeEndElement()

注意

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

writeTextElement(namespaceUri, name, text)
Parameters:
  • namespaceUri – str

  • name – str

  • 文本 – str

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

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

这是一个方便的函数,等同于:

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

注意

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