QDomDocument Class
La classe QDomDocument représente un document XML. En savoir plus...
| En-tête : | #include <QDomDocument> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Xml) target_link_libraries(mytarget PRIVATE Qt6::Xml) |
| qmake : | QT += xml |
| Hérite de : | QDomNode |
- Liste de tous les membres, y compris les membres hérités
- Membres obsolètes
- QDomDocument fait partie des classes XML.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Types publics
(since 6.5) struct | ParseResult |
(since 6.5) enum class | ParseOption { Default, UseNamespaceProcessing, PreserveSpacingOnlyNodes } |
| flags | ParseOptions |
Fonctions publiques
| QDomDocument() | |
| QDomDocument(const QDomDocumentType &doctype) | |
| QDomDocument(const QString &name) | |
| QDomDocument(const QDomDocument &document) | |
| ~QDomDocument() | |
| QDomAttr | createAttribute(const QString &name) |
| QDomAttr | createAttributeNS(const QString &nsURI, const QString &qName) |
| QDomCDATASection | createCDATASection(const QString &value) |
| QDomComment | createComment(const QString &value) |
| QDomDocumentFragment | createDocumentFragment() |
| QDomElement | createElement(const QString &tagName) |
| QDomElement | createElementNS(const QString &nsURI, const QString &qName) |
| QDomEntityReference | createEntityReference(const QString &name) |
| QDomProcessingInstruction | createProcessingInstruction(const QString &target, const QString &data) |
| QDomText | createTextNode(const QString &value) |
| QDomDocumentType | doctype() const |
| QDomElement | documentElement() const |
| QDomElement | elementById(const QString &elementId) |
| QDomNodeList | elementsByTagName(const QString &tagname) const |
| QDomNodeList | elementsByTagNameNS(const QString &nsURI, const QString &localName) |
| QDomImplementation | implementation() const |
| QDomNode | importNode(const QDomNode &importedNode, bool deep) |
| QDomNode::NodeType | nodeType() const |
(since 6.5) QDomDocument::ParseResult | setContent(QAnyStringView text, QDomDocument::ParseOptions options = ParseOption::Default) |
(since 6.5) QDomDocument::ParseResult | setContent(QIODevice *device, QDomDocument::ParseOptions options = ParseOption::Default) |
(since 6.5) QDomDocument::ParseResult | setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = ParseOption::Default) |
(since 6.5) QDomDocument::ParseResult | setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default) |
| QByteArray | toByteArray(int indent = 1) const |
| QString | toString(int indent = 1) const |
| QDomDocument & | operator=(const QDomDocument &other) |
Description détaillée
La classe QDomDocument représente l’intégralité du document XML. Conceptuellement, elle constitue la racine de l’arborescence du document et fournit l’accès principal aux données de ce dernier.
Étant donné que les éléments, les nœuds de texte, les commentaires, les instructions de traitement, etc., ne peuvent pas exister en dehors du contexte d’un document, la classe Document contient également les fonctions de création nécessaires à la création de ces objets. Les objets nœuds créés disposent d’une fonction ownerDocument() qui les associe au document dans le contexte duquel ils ont été créés. Les classes DOM qui seront le plus souvent utilisées sont QDomNode, QDomDocument, QDomElement et QDomText.
Le XML analysé est représenté en interne par une arborescence d'objets accessible via les différentes classes QDom. Toutes les classes QDom ne font référence qu'aux objets de cette arborescence interne. Les objets internes de l'arborescence DOM seront supprimés dès que le dernier objet QDom les référençant ou le QDomDocument lui-même sera supprimé.
La création d’éléments, de nœuds de texte, etc. s’effectue à l’aide des différentes fonctions de fabrique fournies par cette classe. L’utilisation des constructeurs par défaut des classes QDom ne donnera lieu qu’à des objets vides qui ne peuvent être ni manipulés ni insérés dans le document.
La classe QDomDocument dispose de plusieurs fonctions permettant de créer des données de document, par exemple : createElement(), createTextNode(), createComment(), createCDATASection(), createProcessingInstruction(), createAttribute() et createEntityReference(). Certaines de ces fonctions disposent de versions prenant en charge les espaces de noms, à savoir createElementNS() et createAttributeNS(). La fonction createDocumentFragment() sert à stocker des parties du document ; elle est utile pour manipuler des documents complexes.
L’intégralité du contenu du document est définie à l’aide de setContent(). Cette fonction analyse la chaîne qui lui est transmise comme un document XML et crée l’arborescence DOM qui représente le document. L’élément racine est accessible via documentElement(). La représentation textuelle du document peut être obtenue à l’aide de toString().
Remarque : l’arborescence DOM peut finir par occuper beaucoup de mémoire si le document XML est volumineux. Pour ce type de documents, la classe ` QXmlStreamReader ` peut constituer une meilleure solution.
Il est possible d’insérer un nœud provenant d’un autre document dans le document à l’aide de la méthode ` importNode()`.
Vous pouvez obtenir la liste de tous les éléments portant une balise particulière à l’aide de ` elementsByTagName()` ou de ` elementsByTagNameNS()`.
Les classes QDom s’utilisent généralement comme suit :
QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly))
return;
if (!doc.setContent(&file)) {
file.close();
return;
}
file.close();
// print out the element names of all elements that are direct children
// of the outermost element.
QDomElement docElem = doc.documentElement();
QDomNode n = docElem.firstChild();
while(!n.isNull()) {
QDomElement e = n.toElement(); // try to convert the node to an element.
if(!e.isNull()) {
cout << qPrintable(e.tagName()) << '\n'; // the node really is an element.
}
n = n.nextSibling();
}
// Here we append a new element to the end of the document
QDomElement elem = doc.createElement("img");
elem.setAttribute("src", "myimage.png");
docElem.appendChild(elem);Une fois que doc et elem sortent de leur portée, l'arborescence interne entière représentant le document XML est supprimée.
Pour créer un document à l’aide du DOM, utilisez un code similaire à celui-ci :
QDomDocument doc;
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);
QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);
QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);
QString xml = doc.toString();Pour plus d’informations sur le Modèle objet de document (DOM), consultez les spécifications de base du Modèle objet de document (DOM) niveaux 1 et 2.
Voir également l’application « Signets DOM ».
Documentation sur les types de membres
[since 6.5] enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions
Cette énumération décrit les options possibles pouvant être utilisées lors de l'analyse d'un document XML à l'aide de la méthode ` setContent()`.
| Constante | Valeur | Description |
|---|---|---|
QDomDocument::ParseOption::Default | 0x00 | Aucune option d'analyse n'est définie. |
QDomDocument::ParseOption::UseNamespaceProcessing | 0x01 | Le traitement des espaces de noms est activé. |
QDomDocument::ParseOption::PreserveSpacingOnlyNodes | 0x02 | Les nœuds de texte ne contenant que des caractères d’espacement sont conservés. |
Cette énumération a été introduite dans Qt 6.5.
Le type `ParseOptions` est un `typedef` pour ` QFlags<ParseOption>`. Il stocke une combinaison « OU » de valeurs `ParseOption`.
Voir aussi setContent().
Documentation des fonctions membres
QDomDocument::QDomDocument()
Crée un document vide.
[explicit] QDomDocument::QDomDocument(const QDomDocumentType &doctype)
Crée un document de type « doctype ».
Voir également QDomImplementation::createDocumentType().
[explicit] QDomDocument::QDomDocument(const QString &name)
Crée un document et définit le nom du type de document sur « name ».
QDomDocument::QDomDocument(const QDomDocument &document)
Crée une copie de ` document`.
Les données de la copie sont partagées (copie superficielle) : la modification d'un nœud entraîne également la modification de l'autre. Si vous souhaitez effectuer une copie profonde, utilisez cloneNode().
[noexcept] QDomDocument::~QDomDocument()
Détruit l'objet et libère ses ressources.
QDomAttr QDomDocument::createAttribute(const QString &name)
Crée un nouvel attribut nommé « name » pouvant être inséré dans un élément, par exemple à l'aide de la fonction ` QDomElement::setAttributeNode()`.
Si « name » n'est pas un nom XML valide, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également createAttributeNS().
QDomAttr QDomDocument::createAttributeNS(const QString &nsURI, const QString &qName)
Crée un nouvel attribut prenant en charge les espaces de noms, pouvant être inséré dans un élément. Le nom de l'attribut est qName et l'URI de l'espace de noms est nsURI. Cette fonction attribue également les valeurs appropriées aux attributs QDomNode::prefix() et QDomNode::localName() (en fonction de qName).
Si qName n’est pas un nom XML valide, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également createAttribute().
QDomCDATASection QDomDocument::createCDATASection(const QString &value)
Crée une nouvelle section CDATA pour la chaîne « value », qui peut être insérée dans le document, par exemple à l'aide de la fonction ` QDomNode::appendChild()`.
Si value contient des caractères qui ne peuvent pas être stockés dans une section CDATA, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également QDomNode::appendChild(), QDomNode::insertBefore() et QDomNode::insertAfter().
QDomComment QDomDocument::createComment(const QString &value)
Crée un nouveau commentaire pour la chaîne « value » pouvant être inséré dans le document, par exemple à l'aide de la fonction ` QDomNode::appendChild()`.
Si value contient des caractères qui ne peuvent pas être stockés dans un commentaire XML, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également QDomNode::appendChild(), QDomNode::insertBefore() et QDomNode::insertAfter().
QDomDocumentFragment QDomDocument::createDocumentFragment()
Crée un nouveau fragment de document, qui peut servir à contenir des parties du document, par exemple lors de manipulations complexes de l'arborescence du document.
QDomElement QDomDocument::createElement(const QString &tagName)
Crée un nouvel élément nommé « tagName » pouvant être inséré dans l'arborescence DOM, par exemple à l'aide de la fonction QDomNode::appendChild().
Si « tagName » n'est pas un nom XML valide, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également createElementNS(), QDomNode::appendChild(), QDomNode::insertBefore() et QDomNode::insertAfter().
QDomElement QDomDocument::createElementNS(const QString &nsURI, const QString &qName)
Crée un nouvel élément prenant en charge les espaces de noms, pouvant être inséré dans l'arborescence DOM. Le nom de l'élément est qName et l'URI de l'espace de noms est nsURI. Cette fonction attribue également les valeurs appropriées aux propriétés QDomNode::prefix() et QDomNode::localName() (en fonction de qName).
Si qName est une chaîne vide, renvoie un élément nul, que la politique relative aux données non valides soit définie ou non.
Voir également createElement().
QDomEntityReference QDomDocument::createEntityReference(const QString &name)
Crée une nouvelle référence d'entité nommée « name » pouvant être insérée dans le document, par exemple à l'aide de la fonction ` QDomNode::appendChild()`.
Si « name » n’est pas un nom XML valide, le comportement de cette fonction est régi par « QDomImplementation::InvalidDataPolicy ».
Voir également QDomNode::appendChild(), QDomNode::insertBefore() et QDomNode::insertAfter().
QDomProcessingInstruction QDomDocument::createProcessingInstruction(const QString &target, const QString &data)
Crée une nouvelle instruction de traitement pouvant être insérée dans le document, par exemple à l'aide de la fonction ` QDomNode::appendChild()`. Cette fonction définit la cible de l'instruction de traitement sur ` target ` et les données sur ` data`.
Si ` target ` n'est pas un nom XML valide, ou si `data` contient des caractères qui ne peuvent pas apparaître dans une instruction de traitement, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également QDomNode::appendChild(), QDomNode::insertBefore() et QDomNode::insertAfter().
QDomText QDomDocument::createTextNode(const QString &value)
Crée un nœud de texte pour la chaîne « value » pouvant être inséré dans l'arborescence du document, par exemple à l'aide de la fonction ` QDomNode::appendChild()`.
Si value contient des caractères qui ne peuvent pas être stockés en tant que données de caractères d’un document XML (même sous forme de références de caractères), le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir également QDomNode::appendChild(), QDomNode::insertBefore() et QDomNode::insertAfter().
QDomDocumentType QDomDocument::doctype() const
Renvoie le type de ce document.
QDomElement QDomDocument::documentElement() const
Renvoie l'élément racine du document.
QDomElement QDomDocument::elementById(const QString &elementId)
Renvoie l'élément dont l'ID est égal à elementId. Si aucun élément portant cet ID n'a été trouvé, cette fonction renvoie un null element.
Étant donné que les classes QDomClasses ne savent pas quels attributs correspondent aux identifiants d'éléments, cette fonction renvoie toujours un ` null element`. Cela pourrait changer dans une version future.
QDomNodeList QDomDocument::elementsByTagName(const QString &tagname) const
Renvoie un objet de type ` QDomNodeList` contenant tous les éléments du document portant le nom « tagname ». L'ordre de la liste des nœuds correspond à l'ordre dans lequel ils sont rencontrés lors d'un parcours en pré-ordre de l'arborescence des éléments.
Voir également ` elementsByTagNameNS()` et ` QDomElement::elementsByTagName()`.
QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)
Renvoie un objet ` QDomNodeList ` contenant tous les éléments du document dont le nom local est ` localName ` et dont l'URI d'espace de noms est ` nsURI`. L'ordre de la liste des nœuds correspond à l'ordre dans lequel ils sont rencontrés lors d'un parcours en pré-ordre de l'arborescence des éléments.
Voir également elementsByTagName() et QDomElement::elementsByTagNameNS().
QDomImplementation QDomDocument::implementation() const
Renvoie un objet de type « QDomImplementation ».
QDomNode QDomDocument::importNode(const QDomNode &importedNode, bool deep)
Importe le nœud importedNode depuis un autre document vers ce document. importedNode reste dans le document d'origine ; cette fonction crée une copie pouvant être utilisée dans ce document.
Cette fonction renvoie le nœud importé qui appartient à ce document. Le nœud renvoyé n’a pas de parent. Il n’est pas possible d’importer les nœuds QDomDocument et QDomDocumentType. Dans ces cas-là, cette fonction renvoie un null node.
Si ` importedNode ` est un ` null node`, un nœud nul est renvoyé.
Si deep est vrai, cette fonction importe non seulement le nœud importedNode mais aussi l'ensemble de son sous-arbre ; s'il est faux, seul le importedNode est importé. L'argument deep n'a aucun effet sur les nœuds QDomAttr et QDomEntityReference, car les descendants des nœuds QDomAttr sont toujours importés et ceux des nœuds QDomEntityReference ne le sont jamais.
Le comportement de cette fonction varie légèrement selon les types de nœuds :
| Type de nœud | Comportement |
|---|---|
| QDomAttr | L'élément « owner » est défini sur 0 et l'indicateur spécifié est défini sur « true » dans l'attribut généré. L'ensemble de la sous-arborescence de importedNode est toujours importé pour les nœuds d'attribut : deep n'a aucun effet. |
| QDomDocument | Les nœuds de document ne peuvent pas être importés. |
| QDomDocumentFragment | Si deep est vrai, cette fonction importe l'intégralité du fragment de document ; dans le cas contraire, elle génère uniquement un fragment de document vide. |
| QDomDocumentType | Les nœuds de type document ne peuvent pas être importés. |
| QDomElement | Les attributs pour lesquels ` QDomAttr::specified()` est vrai sont également importés ; les autres attributs ne le sont pas. Si ` deep ` est vrai, cette fonction importe également la sous-arborescence de ` importedNode` ; sinon, elle n'importe que le nœud élément (et certains attributs, voir ci-dessus). |
| QDomEntity | Les nœuds d'entité peuvent être importés, mais il n'est pour l'instant pas possible de les utiliser, car le type de document est en lecture seule dans le DOM niveau 2. |
| QDomEntityReference | Les descendants des nœuds de référence d’entité ne sont jamais importés : ` deep ` n’a aucun effet. |
| QDomNotation | Les nœuds de notation peuvent être importés, mais pour l’instant il n’est pas possible de les utiliser, car le type de document est en lecture seule dans DOM niveau 2. |
| QDomProcessingInstruction | La cible et la valeur de l’instruction de traitement sont copiées dans le nouveau nœud. |
| QDomText | Le texte est copié dans le nouveau nœud. |
| QDomCDATASection | Le texte est copié dans le nouveau nœud. |
| QDomComment | Le texte est copié dans le nouveau nœud. |
Voir également QDomElement::setAttribute(), QDomNode::insertBefore(), QDomNode::insertAfter(), QDomNode::replaceChild(), QDomNode::removeChild() et QDomNode::appendChild().
QDomNode::NodeType QDomDocument::nodeType() const
Renvoie « DocumentNode ».
[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QAnyStringView text, QDomDocument::ParseOptions options = ParseOption::Default)
[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QIODevice *device, QDomDocument::ParseOptions options = ParseOption::Default)
[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = ParseOption::Default)
[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default)
Cette fonction analyse le document XML à partir d'un tableau d'octets data, d'une vue de chaîne text, d'un objet IO device ou d'un flux reader, puis l'affecte au contenu du document. Elle tente de détecter l'encodage du document, conformément à la spécification XML. Elle renvoie le résultat de l'analyse dans ParseResult, qui est explicitement converti en bool.
Vous pouvez utiliser le paramètre options pour spécifier différentes options d’analyse, par exemple pour activer le traitement des espaces de noms, etc.
Par défaut, le traitement des espaces de noms est désactivé. S’il est désactivé, l’analyseur n’effectue aucun traitement des espaces de noms lors de la lecture du fichier XML. Les fonctions QDomNode::prefix(), QDomNode::localName() et QDomNode::namespaceURI() renvoient une chaîne vide.
Si le traitement des espaces de noms est activé via l’ options e « parse », l’analyseur reconnaît les espaces de noms dans le fichier XML et attribue les valeurs appropriées au nom de préfixe, au nom local et à l’URI de l’espace de noms. Les fonctions QDomNode::prefix(), QDomNode::localName() et QDomNode::namespaceURI() renvoient une chaîne de caractères pour tous les éléments et attributs, et renvoient une chaîne vide si l’élément ou l’attribut n’a pas de préfixe.
Les nœuds de texte composés uniquement d’espaces sont supprimés et n’apparaîtront pas dans l’ QDomDocument. Depuis Qt 6.5, il est possible de passer QDomDocument::ParseOption::PreserveSpacingOnlyNodes en tant qu’option d’analyse, afin de spécifier que les nœuds de texte composés uniquement d’espaces doivent être conservés.
Les références d'entités sont traitées comme suit :
- Les références aux entités générales internes et aux entités de caractères présentes dans le contenu sont incluses. Le résultat est un nœud ` QDomText ` dans lequel les références sont remplacées par leurs valeurs d’entité correspondantes.
- Les références aux entités paramétriques présentes dans le sous-ensemble interne sont incluses. Le résultat est un nœud ` QDomDocumentType ` contenant les déclarations d’entités et de notation, les références étant remplacées par leurs valeurs d’entité correspondantes.
- Toute référence à une entité analysée générale qui n’est pas définie dans le sous-ensemble interne et qui apparaît dans le contenu est représentée sous la forme d’un nœud « QDomEntityReference ».
- Toute référence d’entité analysée qui n’est pas définie dans le sous-ensemble interne et qui apparaît en dehors du contenu est remplacée par une chaîne vide.
- Toute référence d’entité non analysée est remplacée par une chaîne vide.
Remarque : la surcharge prenant en paramètre un objet `IO device ` tentera de l’ouvrir en mode lecture seule s’il n’est pas déjà ouvert. Dans ce cas, c’est à l’appelant qu’il incombe d’appeler la fonction `close`. Cela changera dans Qt 7, qui n’ouvrira plus l’objet `IO device`. Les applications doivent donc ouvrir elles-mêmes le périphérique avant d’appeler la fonction ` setContent()`.
Ces fonctions ont été introduites dans Qt 6.5.
Voir également ParseResult et ParseOptions.
QByteArray QDomDocument::toByteArray(int indent = 1) const
Convertit le document analysé en sa représentation textuelle et renvoie un objet ` QByteArray ` contenant les données encodées en UTF-8.
Cette fonction utilise ` indent ` comme valeur pour l'espacement des sous-éléments.
Voir également toString().
QString QDomDocument::toString(int indent = 1) const
Convertit le document analysé en sa représentation textuelle.
Cette fonction utilise ` indent ` comme valeur d'espacement pour l'indentation des sous-éléments.
Si indent vaut -1, aucun espace n'est ajouté.
QDomDocument &QDomDocument::operator=(const QDomDocument &other)
Attribue la méthode ` other ` à ce document DOM.
Les données de la copie sont partagées (copie superficielle) : la modification d'un nœud entraîne également la modification de l'autre. Si vous souhaitez effectuer une copie profonde, utilisez la méthode cloneNode().
© 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.