QDomDocument Class
La classe QDomDocument représente un document XML. Plus d'informations...
| En-tête : | #include <QDomDocument> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Xml)target_link_libraries(mytarget PRIVATE Qt6::Xml) |
| qmake : | QT += xml |
| Héritages : | QDomNode |
- Liste de tous les membres, y compris les membres hérités
- les membres dépréciés
- QDomDocument fait partie des classes XML.
Note : 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'ensemble du document XML. Conceptuellement, elle est la racine de l'arbre du document et fournit l'accès principal aux données du document.
Puisque les éléments, les nœuds de texte, les commentaires, les instructions de traitement, etc., ne peuvent exister en dehors du contexte d'un document, la classe document contient également les fonctions d'usine nécessaires à la création de ces objets. Les objets nœuds créés ont une fonction ownerDocument() qui les associe au document dans le contexte duquel ils ont été créés. Les classes DOM les plus utilisées sont QDomNode, QDomDocument, QDomElement et QDomText.
Le XML analysé est représenté en interne par un arbre d'objets auquel on peut accéder à l'aide des différentes classes QDom. Toutes les classes QDom ne font référence qu'aux objets de l'arbre interne. Les objets internes de l'arbre DOM seront supprimés une fois que le dernier objet QDom les référençant ou le document QDom lui-même sera supprimé.
La création d'éléments, de nœuds de texte, etc. se fait à l'aide des diverses fonctions d'usine fournies dans cette classe. L'utilisation des constructeurs par défaut des classes QDom n'aboutira qu'à des objets vides qui ne pourront pas être manipulés ou insérés dans le document.
La classe QDomDocument possède plusieurs fonctions pour créer des données de document, par exemple createElement(), createTextNode(), createComment(), createCDATASection(), createProcessingInstruction(), createAttribute() et createEntityReference(). Certaines de ces fonctions ont des versions qui prennent en charge les espaces de noms, par exemple createElementNS() et createAttributeNS(). La fonction createDocumentFragment() est utilisée pour conserver des parties du document, ce qui est utile pour manipuler des documents complexes.
Le contenu entier du document est défini avec setContent(). Cette fonction analyse la chaîne qui lui est transmise comme un document XML et crée l'arbre DOM qui représente le document. L'élément racine est disponible en utilisant documentElement(). La représentation textuelle du document peut être obtenue en utilisant toString().
Remarque : l'arbre DOM peut finir par réserver beaucoup de mémoire si le document XML est volumineux. Pour de tels documents, la classe QXmlStreamReader peut être une meilleure solution.
Il est possible d'insérer un nœud d'un autre document dans le document en utilisant importNode().
Vous pouvez obtenir une liste de tous les éléments qui ont une balise particulière avec elementsByTagName() ou avec elementsByTagNameNS().
Les classes QDom sont généralement utilisées 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 du champ d'application, l'ensemble de l'arbre interne représentant le document XML est supprimé.
Pour créer un document à l'aide de DOM, utilisez un code comme 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 d'objet de document, voir les spécifications de base du modèle d'objet de document (DOM) de niveau 1 et de niveau 2.
Voir aussi l'application DOM Bookmarks.
Type de membre Documentation
[since 6.5] enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions
Cette enum décrit les options possibles qui peuvent être utilisées lors de l'analyse d'un document XML en utilisant la méthode setContent().
| Constante | Valeur | Description de la constante |
|---|---|---|
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 préservés. |
Cette liste a été introduite dans Qt 6.5.
Le type ParseOptions est un typedef pour QFlags<ParseOption>. Il stocke une combinaison OR de valeurs ParseOption.
Voir également setContent().
Documentation des fonctions membres
QDomDocument::QDomDocument()
Construit un document vide.
[explicit] QDomDocument::QDomDocument(const QDomDocumentType &doctype)
Crée un document de type doctype.
Voir aussi QDomImplementation::createDocumentType().
[explicit] QDomDocument::QDomDocument(const QString &name)
Crée un document et définit le nom du type de document à name.
QDomDocument::QDomDocument(const QDomDocument &document)
Construit une copie de document.
Les données de la copie sont partagées (copie superficielle) : modifier un noeud modifiera également l'autre. Si vous voulez faire 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 appelé name qui peut être inséré dans un élément, par exemple à l'aide de QDomElement::setAttributeNode().
Si name n'est pas un nom XML valide, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir aussi createAttributeNS().
QDomAttr QDomDocument::createAttributeNS(const QString &nsURI, const QString &qName)
Crée un nouvel attribut avec prise en charge de l'espace de noms qui peut ê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 définit également QDomNode::prefix() et QDomNode::localName() aux valeurs appropriées (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 aussi 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 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 qui peut être inséré dans le document, par exemple à l'aide de 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 être utilisé pour 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 appelé tagName qui peut être inséré dans l'arbre DOM, par exemple en utilisant QDomNode::appendChild().
Si tagName n'est pas un nom XML valide, le comportement de cette fonction est régi par QDomImplementation::InvalidDataPolicy.
Voir aussi createElementNS(), QDomNode::appendChild(), QDomNode::insertBefore(), et QDomNode::insertAfter().
QDomElement QDomDocument::createElementNS(const QString &nsURI, const QString &qName)
Crée un nouvel élément avec prise en charge de l'espace de noms qui peut être inséré dans l'arbre DOM. Le nom de l'élément est qName et l'URI de l'espace de noms est nsURI. Cette fonction définit également QDomNode::prefix() et QDomNode::localName() aux valeurs appropriées (en fonction de qName).
Si qName est une chaîne vide, elle 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é appelée name qui peut être insérée dans le document, par exemple à l'aide de 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 qui peut être insérée dans le document, par exemple à l'aide de QDomNode::appendChild(). Cette fonction définit la cible de l'instruction de traitement à target et les données à data.
Si target n'est pas un nom XML valide, ou si les données contiennent 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 qui peut être inséré dans l'arbre du document, par exemple en utilisant 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 la 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 document 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 avec l'ID n'a été trouvé, cette fonction renvoie un null element.
Étant donné que les QDomClasses ne savent pas quels attributs sont des ID d'éléments, cette fonction renvoie toujours null element. Cela pourrait changer dans une version future.
QDomNodeList QDomDocument::elementsByTagName(const QString &tagname) const
Renvoie un fichier QDomNodeList, qui contient tous les éléments du document portant le nom tagname. L'ordre de la liste des nœuds est l'ordre dans lequel ils sont rencontrés lors d'un parcours préalable de l'arbre des éléments.
Voir aussi elementsByTagNameNS() et QDomElement::elementsByTagName().
QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)
Renvoie un fichier QDomNodeList contenant tous les éléments du document dont le nom local est localName et l'URI de l'espace de noms nsURI. L'ordre de la liste des nœuds est l'ordre dans lequel ils sont rencontrés lors d'un parcours préalable de l'arbre des éléments.
Voir également elementsByTagName() et QDomElement::elementsByTagNameNS().
QDomImplementation QDomDocument::implementation() const
Renvoie un objet QDomImplementation.
QDomNode QDomDocument::importNode(const QDomNode &importedNode, bool deep)
Importe le noeud importedNode d'un autre document vers ce document. importedNode reste dans le document original ; cette fonction crée une copie qui peut être utilisée dans ce document.
Cette fonction renvoie le nœud importé qui appartient à ce document. Le nœud retourné n'a pas de parent. Il n'est pas possible d'importer les nœuds QDomDocument et QDomDocumentType. Dans ce cas, 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 tout son sous-arbre ; s'il est faux, seul le nœud importedNode est importé. L'argument deep n'a aucun effet sur les nœuds QDomAttr et QDomEntityReference, puisque 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 est légèrement différent selon les types de nœuds :
| Type de nœud | Comportement |
|---|---|
| QDomAttr | L'élément propriétaire est mis à 0 et l'indicateur spécifié est mis à true dans l'attribut généré. Le sous-arbre entier 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 le fragment de document entier ; sinon, elle ne génère qu'un fragment de document vide. |
| QDomDocumentType | Les nœuds de type de 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 le sous-arbre de importedNode; sinon, elle n'importe que le nœud de l'élément (et certains attributs, voir ci-dessus). |
| QDomEntity | Les nœuds d'entité peuvent être importés, mais il n'y a actuellement aucun moyen de les utiliser puisque 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'y a aucun moyen de les utiliser puisque le type de document est en lecture seule au niveau 2 de DOM. |
| QDomProcessingInstruction | La cible et la valeur de l'instruction de traitement sont copiées dans le nouveau noeud. |
| QDomText | Le texte est copié dans le nouveau noeud. |
| QDomCDATASection | Le texte est copié dans le nouveau noeud. |
| QDomComment | Le texte est copié dans le nouveau nœud. |
Voir aussi QDomElement::setAttribute(), QDomNode::insertBefore(), QDomNode::insertAfter(), QDomNode::replaceChild(), QDomNode::removeChild(), et QDomNode::appendChild().
QDomNode::NodeType QDomDocument::nodeType() const
Retourne DocumentNode.
[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default)
[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)
Cette fonction analyse le document XML à partir du tableau d'octets data, de la vue de chaîne text, de l'IO device, ou du flux reader et le définit comme le contenu du document. Elle tente de détecter le codage du document, conformément à la spécification XML. Renvoie le résultat de l'analyse dans ParseResult, qui convertit explicitement 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 ne traite pas les espaces de noms lorsqu'il lit le 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'analyseur options, l'analyseur reconnaît les espaces de noms dans le fichier XML et donne au nom du préfixe, au nom local et à l'URI de l'espace de noms les valeurs appropriées. Les fonctions QDomNode::prefix(), QDomNode::localName() et QDomNode::namespaceURI() renvoient une chaîne 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 constitués uniquement d'espaces blancs sont supprimés et n'apparaissent pas dans le fichier QDomDocument. Depuis Qt 6.5, il est possible de passer QDomDocument::ParseOption::PreserveSpacingOnlyNodes comme option d'analyse, pour spécifier que les nœuds de texte constitués uniquement d'espaces doivent être préservés.
Les références à des 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 dont les références sont remplacées par les valeurs d'entité correspondantes.
- Les références aux entités de paramètres présentes dans le sous-ensemble interne sont incluses. Le résultat est un nœud QDomDocumentType qui contient des déclarations d'entité et de notation avec les références remplacées par leurs valeurs d'entité correspondantes.
- Toute référence d'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 par 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 IO device essaiera de l'ouvrir en mode lecture seule s'il n'est pas déjà ouvert. Dans ce cas, l'appelant est responsable de l'appel à la fermeture. Cela changera dans Qt 7, qui n'ouvrira plus l'IO device. Les applications doivent donc ouvrir le périphérique elles-mêmes avant d'appeler 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 une adresse QByteArray contenant les données encodées en UTF-8.
Cette fonction utilise indent comme espace d'indentation des sous-éléments.
Voir aussi toString().
QString QDomDocument::toString(int indent = 1) const
Convertit le document analysé en sa représentation textuelle.
Cette fonction utilise indent comme espace pour indenter les sous-éléments.
Si indent vaut -1, aucun espace n'est ajouté.
QDomDocument &QDomDocument::operator=(const QDomDocument &other)
Assigne other à ce document DOM.
Les données de la copie sont partagées (copie superficielle) : modifier un nœud modifiera également l'autre. Si vous voulez faire une copie profonde, utilisez 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.