20.2 PyQt5-【XML操作】-QXmlStreamWriter
1.QXmlStreamWriter简介
在 PyQt5 中,QXmlStreamWriter用于逐步生成 XML 数据。支持以流的形式写入XML,适合处理较大或复杂的XML文件
2.QXmlStreamWriter案例
import sys
from PyQt5.QtCore import QXmlStreamWriter, QFile, QIODevice
# 创建一个文件用于输出 XML
file = QFile("Demo.xml")
if not file.open(QIODevice.WriteOnly):
print("打开文件错误")
sys.exit(1)
# 创建 QXmlStreamWriter 对象
writer = QXmlStreamWriter(file)
# 启用自动格式化
writer.setAutoFormatting(True)
writer.setAutoFormattingIndent(4)
# 开始写入 XML 文档
writer.writeStartDocument()
# 写入根元素
writer.writeStartElement("root")
# 写入一个带属性的元素
writer.writeStartElement("item")
writer.writeAttribute("id", "1")
writer.writeCharacters("item 1")
writer.writeEndElement() # 结束 - 元素
# 写入一个空元素
writer.writeEmptyElement("emptyItem")
# 写入带命名空间的元素
writer.writeStartElement("https://www.python.org/", "element")
writer.writeDefaultNamespace("https://www.python.org/")
writer.writeCharacters("Namespaced")
writer.writeEndElement()
# 结束根元素
writer.writeEndElement()
# 结束 XML 文档
writer.writeEndDocument()
# 关闭文件
file.close()
3.常用方法和属性
方法和属性 | 描述 |
autoFormatting() | 检查是否启用了自动格式化 |
autoFormattingIndent() | 获取自动格式化的缩进字符数 |
setAutoFormatting(bool) | 启用或禁用自动格式化,True 启用,False 禁用 |
setAutoFormattingIndent(int) | 设置自动格式化时每一级的缩进字符数 |
writeStartDocument(version: str) | 开始写入 XML 文档的头部声明(如 ) |
writeEndDocument() | 结束 XML 文档,确保所有打开的标签被正确关闭。写完文档的最后一个元素后调用此方法。 |
writeStartElement(elementName: str) | 开始写入一个 XML 元素 |
writeEndElement() | 结束当前的 XML 元素,生成 或自闭合标签 |
writeEmptyElement(elementName) | 写入一个自闭合的 XML 元素,如 |
writeAttribute(name, value) | 为当前元素写入属性,生成 name="value" |
writeAttributes(attributes: QXmlStreamAttributes) | 写入一组属性,例如 attributes = QXmlStreamAttributes() attributes.append("id", "123") attributes.append("type", "example") writer.writeAttributes(attributes) |
writeCharacters(text: str) | 为当前元素写入字符数据,如 elementText,生成 |
writeCDATA(text: str) | 写入一段 CDATA 字符数据,如 |
writeComment(comment: str) | 写入一条注释,如 |
writeProcessingInstruction(target: str, data: str) | 写入一个处理指令,例如: |
writeNamespace(namespaceUri: str, prefix: str) | 为当前元素写入命名空间声明,例如:xmlns:prefix="namespaceUri" |
writeDefaultNamespace(namespaceUri: str) | 为当前元素写入默认命名空间声明,例如:xmlns="namespaceUri" |
setDevice(device) | 设置输出设备,可以是文件、QIODevice 或 QByteArray |
device() | 获取当前输出设备 |