Sur cette page

QXmlStreamWriter Class

La classe QXmlStreamWriter fournit un rédacteur XML 1.0 avec une API de flux simple. Plus d'informations...

En-tête : #include <QXmlStreamWriter>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Remarque : toutes les fonctions de cette classe sont réentrantes.

Types publics

(since 6.10) enum class Error { None, IO, Encoding, InvalidCharacter, Custom }

Propriétés

Fonctions publiques

QXmlStreamWriter()
QXmlStreamWriter(QByteArray *array)
QXmlStreamWriter(QIODevice *device)
QXmlStreamWriter(QString *string)
~QXmlStreamWriter()
bool autoFormatting() const
int autoFormattingIndent() const
QIODevice *device() const
(since 6.10) QXmlStreamWriter::Error error() const
(since 6.10) QString errorString() const
bool hasError() const
(since 6.10) void raiseError(QAnyStringView message)
void setAutoFormatting(bool enable)
void setAutoFormattingIndent(int spacesOrTabs)
void setDevice(QIODevice *device)
void setStopWritingOnError(bool stop)
bool stopWritingOnError() const
void writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value)
void writeAttribute(const QXmlStreamAttribute &attribute)
void writeAttribute(QAnyStringView qualifiedName, QAnyStringView value)
void writeAttributes(const QXmlStreamAttributes &attributes)
void writeCDATA(QAnyStringView text)
void writeCharacters(QAnyStringView text)
void writeComment(QAnyStringView text)
void writeCurrentToken(const QXmlStreamReader &reader)
void writeDTD(QAnyStringView dtd)
void writeDefaultNamespace(QAnyStringView namespaceUri)
void writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name)
void writeEmptyElement(QAnyStringView qualifiedName)
void writeEndDocument()
void writeEndElement()
void writeEntityReference(QAnyStringView name)
void writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {})
void writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {})
void writeStartDocument(QAnyStringView version)
void writeStartDocument(QAnyStringView version, bool standalone)
void writeStartDocument()
void writeStartElement(QAnyStringView namespaceUri, QAnyStringView name)
void writeStartElement(QAnyStringView qualifiedName)
void writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text)
void writeTextElement(QAnyStringView qualifiedName, QAnyStringView text)

Description détaillée

QXmlStreamWriter est le pendant de QXmlStreamReader pour l'écriture de XML. Il est conforme à la spécification XML 1.0 et écrit des documents en utilisant la syntaxe XML 1.0, les règles d'échappement et les contraintes de validité des caractères.

Remarque : XML 1.1 n'est pas pris en charge. Bien que les chaînes de version puissent être définies manuellement dans la sortie, les documents nécessitant des caractéristiques spécifiques à XML 1.1, telles que des caractères de contrôle supplémentaires, ne peuvent pas être produits à l'aide de cette classe.

Comme sa classe apparentée, elle opère sur un QIODevice spécifié avec setDevice(). L'API est simple et directe : pour chaque jeton ou événement XML que vous souhaitez écrire, le rédacteur fournit une fonction spécialisée.

Vous commencez un document avec writeStartDocument() et le terminez avec writeEndDocument(). Cela fermera implicitement toutes les balises ouvertes restantes.

Les balises d'éléments sont ouvertes par writeStartElement(), suivi de writeAttribute() ou writeAttributes(), du contenu de l'élément, puis de writeEndElement(). Une forme plus courte, writeEmptyElement(), peut être utilisée pour écrire des éléments vides, suivie de writeAttributes().

Le contenu d'un élément est constitué de caractères, de références d'entités ou d'éléments imbriqués. Il est écrit avec writeCharacters(), qui se charge également d'échapper tous les caractères et séquences de caractères interdits, writeEntityReference(), ou les appels ultérieurs à writeStartElement(). Une méthode de commodité writeTextElement() peut être utilisée pour écrire des éléments terminaux qui ne contiennent rien d'autre que du texte.

L'extrait de code abrégé suivant montre l'utilisation de base de la classe pour écrire du XML formaté avec indentation :

    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 se charge de préfixer les espaces de noms, tout ce que vous avez à faire est de spécifier le namespaceUri lorsque vous écrivez des éléments ou des attributs. Si vous devez vous conformer à certains préfixes, vous pouvez forcer le rédacteur à les utiliser en déclarant les espaces de noms manuellement avec writeNamespace() ou writeDefaultNamespace(). Vous pouvez également contourner la prise en charge de l'espace de noms du rédacteur de flux et utiliser des méthodes surchargées qui prennent un nom qualifié à la place. L'espace de noms http://www.w3.org/XML/1998/namespace est implicite et correspond au préfixe xml.

Le rédacteur de flux peut formater automatiquement les données XML générées en ajoutant des sauts de ligne et une indentation aux sections vides entre les éléments, ce qui rend les données XML plus lisibles pour les humains et plus faciles à utiliser pour la plupart des systèmes de gestion de code source. Cette fonction peut être activée à l'aide de la propriété autoFormatting et personnalisée à l'aide de la propriété autoFormattingIndent.

Les autres fonctions sont writeCDATA(), writeComment(), writeProcessingInstruction() et writeDTD(). Le chaînage des flux XML est pris en charge par writeCurrentToken().

QXmlStreamWriter code toujours le XML en UTF-8.

Si une erreur survient lors de l'écriture, hasError() renvoie un message vrai. Cependant, par défaut, les données qui étaient déjà en mémoire tampon au moment où l'erreur s'est produite, ou les données écrites à partir de la même opération, peuvent toujours être écrites sur le périphérique sous-jacent. Ceci s'applique à Error::Encoding, Error::InvalidCharacter, et à Error::Custom soulevé par l'utilisateur. Pour éviter cela et s'assurer qu'aucune donnée n'est écrite après une erreur, utilisez la propriété stopWritingOnError. Lorsque cette propriété est activée, la première erreur interrompt immédiatement la sortie et l'auteur ignore toutes les opérations d'écriture suivantes. Les applications doivent considérer l'état d'erreur comme terminal et éviter d'utiliser le rédacteur après une erreur.

L'exemple QXmlStream Bookmarks illustre comment utiliser un rédacteur de flux pour écrire un fichier de signets XML (XBEL) qui a été précédemment lu par un QXmlStreamReader.

Documentation sur les types de membres

[since 6.10] enum class QXmlStreamWriter::Error

Cette énumération spécifie les différents cas d'erreur qui peuvent se produire lors de l'écriture de XML avec QXmlStreamWriter.

ConstanteValeurDescription de l'erreur
QXmlStreamWriter::Error::None0Aucune erreur ne s'est produite.
QXmlStreamWriter::Error::IO1Une erreur d'E/S s'est produite lors de l'écriture sur le périphérique.
QXmlStreamWriter::Error::Encoding2Une erreur d'encodage s'est produite lors de la conversion des caractères au format de sortie.
QXmlStreamWriter::Error::InvalidCharacter3Un caractère non autorisé dans XML 1.0 a été rencontré lors de l'écriture.
QXmlStreamWriter::Error::Custom4Une erreur personnalisée a été soulevée avec raiseError().

Cette liste a été introduite dans Qt 6.10.

Documentation sur les propriétés

autoFormatting : bool

Cette propriété contient l'indicateur de formatage automatique du rédacteur de flux.

Cette propriété détermine si le rédacteur de flux formate automatiquement ou non les données XML générées. Si cette option est activée, le rédacteur ajoute automatiquement des sauts de ligne et une indentation aux sections vides entre les éléments (espace blanc ignorable). L'objectif principal du formatage automatique est de diviser les données en plusieurs lignes et d'améliorer la lisibilité pour un lecteur humain. La profondeur de l'indentation peut être contrôlée par la propriété autoFormattingIndent.

Par défaut, l'auto-formatage est désactivé.

Fonctions d'accès :

bool autoFormatting() const
void setAutoFormatting(bool enable)

autoFormattingIndent : int

Cette propriété indique le nombre d'espaces ou de tabulations utilisés pour l'indentation lorsque le formatage automatique est activé. Les nombres positifs indiquent des espaces, les nombres négatifs des tabulations.

L'indentation par défaut est de 4.

Fonctions d'accès :

int autoFormattingIndent() const
void setAutoFormattingIndent(int spacesOrTabs)

Voir aussi autoFormatting.

[since 6.10] stopWritingOnError : bool

Cette propriété permet d'arrêter l'écriture sur le périphérique en cas d'erreur.

Si cette propriété vaut true, l'auteur arrête immédiatement d'écrire lorsqu'il rencontre une erreur et ignore toutes les opérations d'écriture suivantes. Lorsque cette propriété vaut false, le rédacteur peut continuer à écrire après une erreur, en ignorant l'écriture non valide mais en autorisant d'autres sorties.

Notez que cela inclut Error::InvalidCharacter, Error::Encoding, et Error::Custom. Error::IO est toujours considéré comme terminal et arrête d'écrire quel que soit ce paramètre.

La valeur par défaut est false.

Cette propriété a été introduite dans Qt 6.10.

Fonctions d'accès :

bool stopWritingOnError() const
void setStopWritingOnError(bool stop)

Documentation des fonctions membres

QXmlStreamWriter::QXmlStreamWriter()

Construit un rédacteur de flux.

Voir aussi setDevice().

[explicit] QXmlStreamWriter::QXmlStreamWriter(QByteArray *array)

Construit un rédacteur de flux qui écrit dans array. Cela revient à créer un rédacteur xml qui fonctionne sur un périphérique QBuffer qui, à son tour, fonctionne sur array.

[explicit] QXmlStreamWriter::QXmlStreamWriter(QIODevice *device)

Construit un rédacteur de flux qui écrit dans device;

[explicit] QXmlStreamWriter::QXmlStreamWriter(QString *string)

Construit un rédacteur de flux qui écrit dans string.

[noexcept] QXmlStreamWriter::~QXmlStreamWriter()

Destructeur.

bool QXmlStreamWriter::autoFormatting() const

Renvoie true si le formatage automatique est activé, sinon false.

Note : Fonction Getter pour la propriété autoFormatting.

Voir également setAutoFormatting().

QIODevice *QXmlStreamWriter::device() const

Renvoie le dispositif actuel associé à QXmlStreamWriter, ou nullptr si aucun dispositif n'a été assigné.

Voir aussi setDevice().

[since 6.10] QXmlStreamWriter::Error QXmlStreamWriter::error() const

Renvoie l'état d'erreur actuel de l'auteur.

Si aucune erreur ne s'est produite, cette fonction renvoie QXmlStreamWriter::Error::None.

Cette fonction a été introduite dans Qt 6.10.

Voir aussi errorString(), raiseError(), et hasError().

[since 6.10] QString QXmlStreamWriter::errorString() const

Si une erreur s'est produite, il renvoie le message d'erreur associé.

Le message d'erreur est soit défini en interne par QXmlStreamWriter, soit fourni par l'utilisateur via raiseError(). Si aucune erreur ne s'est produite, cette fonction renvoie une chaîne de caractères nulle.

Cette fonction a été introduite dans Qt 6.10.

Voir aussi error(), raiseError(), et hasError().

bool QXmlStreamWriter::hasError() const

Renvoie true si une erreur s'est produite lors de l'écriture des données.

Si l'erreur est Error::IO, les écritures ultérieures dans le document sous-jacent QIODevice échoueront. Dans d'autres cas, des données malformées peuvent être écrites dans le document.

L'état d'erreur n'est jamais réinitialisé. Les écritures effectuées après l'apparition de l'erreur peuvent être ignorées, même si la condition d'erreur est levée.

Voir également error(), errorString() et raiseError().

[since 6.10] void QXmlStreamWriter::raiseError(QAnyStringView message)

Lance une erreur personnalisée avec l'adresse message.

Cette fonction permet d'indiquer manuellement qu'une erreur s'est produite pendant l'écriture, comme un échec de validation au niveau de l'application.

Cette fonction a été introduite dans Qt 6.10.

Voir aussi errorString(), error(), et hasError().

void QXmlStreamWriter::setAutoFormatting(bool enable)

Active le formatage automatique si enable est true, sinon le désactive.

La valeur par défaut est false.

Remarque : fonction de définition de la propriété autoFormatting.

Voir aussi autoFormatting().

void QXmlStreamWriter::setDevice(QIODevice *device)

Définit le périphérique actuel à device. Si vous voulez que le flux écrive dans un QByteArray, vous pouvez créer un périphérique QBuffer.

Voir aussi device().

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

Écrit un attribut avec name et value, préfixé pour l'espace de noms spécifié namespaceUri. Si l'espace de noms n'a pas encore été déclaré, QXmlStreamWriter génère une déclaration d'espace de noms.

Cette fonction ne peut être appelée qu'après writeStartElement(), avant que le contenu ne soit écrit, ou après writeEmptyElement().

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

void QXmlStreamWriter::writeAttribute(const QXmlStreamAttribute &attribute)

Écrit la page attribute.

Cette fonction ne peut être appelée qu'après writeStartElement(), avant que le contenu ne soit écrit, ou après writeEmptyElement().

Il s'agit d'une fonction surchargée.

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

Écrit un attribut avec qualifiedName et value.

Cette fonction ne peut être appelée qu'après writeStartElement(), avant que le contenu ne soit écrit, ou après writeEmptyElement().

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

Il s'agit d'une fonction surchargée.

void QXmlStreamWriter::writeAttributes(const QXmlStreamAttributes &attributes)

Écrit le vecteur d'attribut attributes. Si un espace de noms référencé dans un attribut n'a pas encore été déclaré, QXmlStreamWriter génère une déclaration d'espace de noms pour cet attribut.

Cette fonction ne peut être appelée qu'après writeStartElement(), avant l'écriture de tout contenu, ou après writeEmptyElement().

Voir aussi writeAttribute() et writeNamespace().

void QXmlStreamWriter::writeCDATA(QAnyStringView text)

Écrit text en tant que section CDATA. Si text contient la séquence de caractères interdite "]]> ", il est divisé en plusieurs sections CDATA.

Cette fonction existe principalement pour des raisons d'exhaustivité. Normalement, vous ne devriez pas avoir besoin de l'utiliser, car writeCharacters() échappe automatiquement tous les caractères qui ne font pas partie du contenu.

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction utilise QString, et non QAnyStringView.

void QXmlStreamWriter::writeCharacters(QAnyStringView text)

Écrit text. Les caractères "<", "&" et """ sont convertis en références d'entités "&lt ;", "&amp ;" et "&quot ;". Pour éviter la séquence interdite "]]>", ">" est également échappé en tant que "&gt ;".

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait en compte QString, et non QAnyStringView.

Voir aussi writeEntityReference().

void QXmlStreamWriter::writeComment(QAnyStringView text)

Écrit text en tant que commentaire XML, où text ne doit pas contenir la séquence interdite -- ou se terminer par -. Notez que XML ne fournit aucun moyen d'échapper à - dans un commentaire.

Remarque : dans les versions de Qt XML antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)

Écrit l'état actuel du site reader. Tous les états valides possibles sont pris en charge.

L'objectif de cette fonction est de prendre en charge le traitement en chaîne des données XML.

Voir également QXmlStreamReader::tokenType().

void QXmlStreamWriter::writeDTD(QAnyStringView dtd)

Écrit une section DTD. Le site dtd représente l'ensemble de la production doctypedecl de la spécification XML 1.0.

Remarque : dans les versions de Qt XML antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

void QXmlStreamWriter::writeDefaultNamespace(QAnyStringView namespaceUri)

Écrit une déclaration d'espace de noms par défaut pour namespaceUri.

Si writeStartElement() ou writeEmptyElement() a été appelé, la déclaration s'applique à l'élément actuel ; sinon, elle s'applique à l'élément enfant suivant.

Notez que les espaces de noms http://www.w3.org/XML/1998/namespace (lié à xmlns) et http://www.w3.org/2000/xmlns/ (lié à xml) ne peuvent pas, par définition, être déclarés par défaut.

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

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

Écrit un élément vide avec name, préfixé pour l'espace de noms spécifié namespaceUri. Si l'espace de noms n'a pas été déclaré, QXmlStreamWriter génère une déclaration d'espace de noms. Les appels ultérieurs à writeAttribute() ajouteront des attributs à cet élément.

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction prenait QString, et non QAnyStringView.

Voir aussi writeNamespace().

void QXmlStreamWriter::writeEmptyElement(QAnyStringView qualifiedName)

Écrit un élément vide avec le nom qualifié qualifiedName. Les appels ultérieurs à writeAttribute() ajouteront des attributs à cet élément.

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction prenait QString, et non QAnyStringView.

Il s'agit d'une fonction surchargée.

void QXmlStreamWriter::writeEndDocument()

Ferme tous les éléments de départ encore ouverts et écrit une nouvelle ligne.

Voir également writeStartDocument().

void QXmlStreamWriter::writeEndElement()

Ferme l'élément de départ précédent.

Voir également writeStartElement().

void QXmlStreamWriter::writeEntityReference(QAnyStringView name)

Écrit la référence de l'entité name dans le flux, sous la forme "&name;".

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

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

Rédige une déclaration d'espace de noms pour namespaceUri avec prefix. Si prefix est vide, QXmlStreamWriter attribue un préfixe unique composé de la lettre "n" suivie d'un nombre.

Si writeStartElement() ou writeEmptyElement() a été appelé, la déclaration s'applique à l'élément actuel ; sinon, elle s'applique à l'élément enfant suivant.

Notez que le préfixe xml est à la fois prédéfini et réservé à http://www.w3.org/XML/1998/namespace, qui à son tour ne peut être lié à aucun autre préfixe. Le préfixe xmlns et son URI http://www.w3.org/2000/xmlns/ sont utilisés pour le mécanisme de l'espace de noms lui-même et sont donc totalement interdits dans les déclarations.

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

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

Écrit une instruction de traitement XML avec target et data, où data ne doit pas contenir la séquence "?>".

Remarque : dans les versions de Qt XML antérieures à la version 6.5, cette fonction prenait QString, et non QAnyStringView.

void QXmlStreamWriter::writeStartDocument(QAnyStringView version)

Écrit un début de document avec le numéro de version XML version.

Note : Cette fonction ne valide pas la chaîne de la version et permet de la définir manuellement. Cependant, QXmlStreamWriter ne prend en charge que XML 1.0. La définition d'une chaîne de version autre que "1.0" ne modifie pas le comportement du rédacteur ni les règles d'échappement. Il incombe à l'appelant de veiller à la cohérence entre la version déclarée et le contenu réel.

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction utilise QString, et non QAnyStringView.

Voir aussi writeEndDocument().

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

Écrit un début de document avec le numéro de version XML version et un attribut autonome standalone.

Note : Cette fonction ne valide pas la chaîne de la version et permet de la définir manuellement. Toutefois, QXmlStreamWriter ne prend en charge que le XML 1.0. La définition d'une chaîne de version autre que "1.0" ne modifie pas le comportement du rédacteur ni les règles d'échappement. Il incombe à l'appelant de veiller à la cohérence entre la version déclarée et le contenu réel.

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction utilise QString, et non QAnyStringView.

Voir aussi writeEndDocument().

void QXmlStreamWriter::writeStartDocument()

Écrit un début de document avec le numéro de version XML "1.0".

Il s'agit d'une fonction surchargée.

Voir aussi writeEndDocument().

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

Écrit un élément de départ avec name, préfixé pour l'espace de noms spécifié namespaceUri. Si l'espace de noms n'a pas encore été déclaré, QXmlStreamWriter génère une déclaration d'espace de noms. Les appels ultérieurs à writeAttribute() ajouteront des attributs à cet élément.

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction prenait QString, et non QAnyStringView.

Voir également writeNamespace(), writeEndElement() et writeEmptyElement().

void QXmlStreamWriter::writeStartElement(QAnyStringView qualifiedName)

Écrit un élément de départ avec qualifiedName. Les appels ultérieurs à writeAttribute() ajouteront des attributs à cet élément.

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction prenait QString, et non QAnyStringView.

Il s'agit d'une fonction surchargée.

Voir également writeEndElement() et writeEmptyElement().

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

Écrit un élément de texte avec name, préfixé pour les éléments spécifiés namespaceUri, et text. Si l'espace de noms n'a pas été déclaré, QXmlStreamWriter générera une déclaration d'espace de noms pour lui.

Il s'agit d'une fonction de commodité équivalente à :

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

Note : Dans les versions de Qt antérieures à la 6.5, cette fonction prenait QString, et non QAnyStringView.

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

Écrit un élément de texte avec qualifiedName et text.

Il s'agit d'une fonction de commodité équivalente à :

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

Remarque : dans les versions de Qt antérieures à la 6.5, cette fonction prenait QString, et non QAnyStringView.

Il s'agit d'une fonction surchargée.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.