QDomDocument Class
Die Klasse QDomDocument stellt ein XML-Dokument dar. Mehr...
Kopfzeile: | #include <QDomDocument> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Xml) target_link_libraries(mytarget PRIVATE Qt6::Xml) |
qmake: | QT += xml |
Vererbt: | QDomNode |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Ausgeschiedene Mitglieder
- QDomDocument ist Teil von XML Classes.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Typen
(since 6.5) struct | ParseResult |
(since 6.5) enum class | ParseOption { Default, UseNamespaceProcessing, PreserveSpacingOnlyNodes } |
flags | ParseOptions |
Öffentliche Funktionen
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) |
Detaillierte Beschreibung
Die Klasse QDomDocument repräsentiert das gesamte XML-Dokument. Sie ist konzeptionell die Wurzel des Dokumentbaums und bietet den primären Zugriff auf die Daten des Dokuments.
Da Elemente, Textknoten, Kommentare, Verarbeitungsanweisungen usw. nicht außerhalb des Kontexts eines Dokuments existieren können, enthält die Dokumentenklasse auch die Fabrikfunktionen, die zur Erstellung dieser Objekte benötigt werden. Die erstellten Knotenobjekte verfügen über eine Funktion ownerDocument(), die sie mit dem Dokument verbindet, in dessen Kontext sie erstellt wurden. Die DOM-Klassen, die am häufigsten verwendet werden, sind QDomNode, QDomDocument, QDomElement und QDomText.
Das geparste XML wird intern durch einen Baum von Objekten dargestellt, auf die mit den verschiedenen QDom-Klassen zugegriffen werden kann. Alle QDom-Klassen verweisen nur auf Objekte im internen Baum. Die internen Objekte im DOM-Baum werden gelöscht, sobald das letzte QDom-Objekt, das auf sie verweist, oder das QDomDocument selbst gelöscht wird.
Die Erstellung von Elementen, Textknoten, etc. erfolgt mit Hilfe der verschiedenen Factory-Funktionen, die in dieser Klasse zur Verfügung stehen. Die Verwendung der Standardkonstruktoren der QDom-Klassen führt nur zu leeren Objekten, die nicht manipuliert oder in das Dokument eingefügt werden können.
Die Klasse QDomDocument verfügt über mehrere Funktionen zur Erstellung von Dokumentdaten, zum Beispiel createElement(), createTextNode(), createComment(), createCDATASection(), createProcessingInstruction(), createAttribute() und createEntityReference(). Einige dieser Funktionen haben Versionen, die Namespaces unterstützen, z. B. createElementNS() und createAttributeNS(). Die Funktion createDocumentFragment() wird verwendet, um Teile des Dokuments zu speichern; dies ist nützlich, um komplexe Dokumente zu bearbeiten.
Der gesamte Inhalt des Dokuments wird mit setContent() festgelegt. Diese Funktion parst die übergebene Zeichenkette als XML-Dokument und erstellt den DOM-Baum, der das Dokument darstellt. Das Wurzelelement ist mit documentElement() verfügbar. Die textuelle Darstellung des Dokuments kann mit toString() abgerufen werden.
Hinweis: Der DOM-Baum kann viel Speicherplatz belegen, wenn das XML-Dokument sehr groß ist. Für solche Dokumente könnte die Klasse QXmlStreamReader eine bessere Lösung sein.
Es ist möglich, mit importNode() einen Knoten aus einem anderen Dokument in das Dokument einzufügen.
Eine Liste aller Elemente, die ein bestimmtes Tag haben, erhalten Sie mit elementsByTagName() oder mit elementsByTagNameNS().
Die QDom-Klassen werden normalerweise wie folgt verwendet:
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);
Sobald doc
und elem
den Anwendungsbereich verlassen, wird der gesamte interne Baum, der das XML-Dokument darstellt, gelöscht.
Um ein Dokument mit DOM zu erstellen, verwenden Sie Code wie diesen:
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();
Weitere Informationen über das Document Object Model finden Sie in den Document Object Model (DOM) Level 1 und Level 2 Core Specifications.
Siehe auch DOM Bookmarks Application.
Member Typ Dokumentation
[since 6.5]
enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions
Diese Aufzählung beschreibt die möglichen Optionen, die beim Parsen eines XML-Dokuments mit der Methode setContent() verwendet werden können.
Konstante | Wert | Beschreibung |
---|---|---|
QDomDocument::ParseOption::Default | 0x00 | Es sind keine Parse-Optionen gesetzt. |
QDomDocument::ParseOption::UseNamespaceProcessing | 0x01 | Die Namespace-Verarbeitung ist aktiviert. |
QDomDocument::ParseOption::PreserveSpacingOnlyNodes | 0x02 | Textknoten, die nur Leerzeichen enthalten, bleiben erhalten. |
Diese Aufzählung wurde in Qt 6.5 eingeführt.
Der Typ ParseOptions ist ein Typedef für QFlags<ParseOption>. Er speichert eine OR-Kombination von ParseOption-Werten.
Siehe auch setContent().
Dokumentation der Mitgliedsfunktionen
[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)
Diese Funktion parst das XML-Dokument aus dem Byte-Array data, der String-Ansicht text, dem IO device oder dem Stream reader und setzt es als Inhalt des Dokuments ein. Sie versucht, die Kodierung des Dokuments in Übereinstimmung mit der XML-Spezifikation zu erkennen. Gibt das Ergebnis des Parsens in ParseResult zurück, das explizit in bool
umgewandelt wird.
Mit dem Parameter options können Sie verschiedene Parsing-Optionen angeben, z. B. die Namespace-Verarbeitung aktivieren usw.
Standardmäßig ist die Namespace-Verarbeitung deaktiviert. Wenn sie deaktiviert ist, führt der Parser keine Namespace-Verarbeitung durch, wenn er die XML-Datei liest. Die Funktionen QDomNode::prefix(), QDomNode::localName() und QDomNode::namespaceURI() geben einen leeren String zurück.
Wenn die Namespace-Verarbeitung über die Parse-Funktion options aktiviert ist, erkennt der Parser Namespaces in der XML-Datei und setzt den Präfixnamen, den lokalen Namen und den Namespace-URI auf die entsprechenden Werte. Die Funktionen QDomNode::prefix(), QDomNode::localName() und QDomNode::namespaceURI() geben eine Zeichenkette für alle Elemente und Attribute zurück und geben eine leere Zeichenkette zurück, wenn das Element oder Attribut kein Präfix hat.
Textknoten, die nur aus Leerzeichen bestehen, werden entfernt und erscheinen nicht in QDomDocument. Seit Qt 6.5 kann man QDomDocument::ParseOption::PreserveSpacingOnlyNodes als Parse-Option übergeben, um anzugeben, dass Textknoten, die nur aus Leerzeichen bestehen, erhalten bleiben müssen.
Entity-Referenzen werden wie folgt gehandhabt:
- Referenzen auf interne allgemeine Entitäten und Zeichenentitäten, die im Inhalt vorkommen, werden einbezogen. Das Ergebnis ist ein QDomText Knoten, in dem die Referenzen durch die entsprechenden Entitätswerte ersetzt werden.
- Verweise auf Parameterentitäten, die in der internen Untermenge vorkommen, werden einbezogen. Das Ergebnis ist ein QDomDocumentType Knoten, der Entitäts- und Notationsdeklarationen enthält, wobei die Referenzen durch die entsprechenden Entitätswerte ersetzt werden.
- Jede allgemeine geparste Entitätsreferenz, die nicht in der internen Untermenge definiert ist und im Inhalt vorkommt, wird als QDomEntityReference -Knoten dargestellt.
- Jede geparste Entitätsreferenz, die nicht in der internen Teilmenge definiert ist und außerhalb des Inhalts vorkommt, wird durch einen leeren String ersetzt.
- Jede nicht geparste Entitätsreferenz wird durch eine leere Zeichenkette ersetzt.
Hinweis: Die Überladung, die IO device nimmt, wird versuchen, es im Nur-Lese-Modus zu öffnen, wenn es nicht bereits geöffnet ist. In diesem Fall ist der Aufrufer für den Aufruf von close verantwortlich. Dies wird sich in Qt 7 ändern, welches das IO device nicht mehr öffnen wird. Anwendungen sollten daher das Gerät selbst öffnen, bevor sie setContent() aufrufen.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch ParseResult und ParseOptions.
QDomDocument::QDomDocument()
Konstruiert ein leeres Dokument.
[explicit]
QDomDocument::QDomDocument(const QDomDocumentType &doctype)
Erzeugt ein Dokument mit dem Dokumenttyp doctype.
Siehe auch QDomImplementation::createDocumentType().
[explicit]
QDomDocument::QDomDocument(const QString &name)
Erzeugt ein Dokument und setzt den Namen des Dokumenttyps auf name.
QDomDocument::QDomDocument(const QDomDocument &document)
Konstruiert eine Kopie von document.
Die Daten der Kopie werden gemeinsam genutzt (oberflächliche Kopie): Die Änderung eines Knotens wird auch den anderen verändern. Wenn Sie eine tiefe Kopie erstellen möchten, verwenden Sie cloneNode().
[noexcept]
QDomDocument::~QDomDocument()
Zerstört das Objekt und gibt seine Ressourcen frei.
QDomAttr QDomDocument::createAttribute(const QString &name)
Erzeugt ein neues Attribut namens name, das in ein Element eingefügt werden kann, z. B. mit QDomElement::setAttributeNode().
Wenn name kein gültiger XML-Name ist, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch createAttributeNS().
QDomAttr QDomDocument::createAttributeNS(const QString &nsURI, const QString &qName)
Erzeugt ein neues Attribut mit Namespace-Unterstützung, das in ein Element eingefügt werden kann. Der Name des Attributs ist qName und der Namespace-URI ist nsURI. Diese Funktion setzt auch QDomNode::prefix() und QDomNode::localName() auf die entsprechenden Werte (abhängig von qName).
Wenn qName kein gültiger XML-Name ist, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch createAttribute().
QDomCDATASection QDomDocument::createCDATASection(const QString &value)
Erzeugt einen neuen CDATA-Abschnitt für die Zeichenkette value, der in das Dokument eingefügt werden kann, z. B. mit QDomNode::appendChild().
Wenn value Zeichen enthält, die nicht in einem CDATA-Abschnitt gespeichert werden können, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch QDomNode::appendChild(), QDomNode::insertBefore(), und QDomNode::insertAfter().
QDomComment QDomDocument::createComment(const QString &value)
Erzeugt einen neuen Kommentar für die Zeichenkette value, der in das Dokument eingefügt werden kann, z. B. mit QDomNode::appendChild().
Wenn value Zeichen enthält, die nicht in einem XML-Kommentar gespeichert werden können, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch QDomNode::appendChild(), QDomNode::insertBefore(), und QDomNode::insertAfter().
QDomDocumentFragment QDomDocument::createDocumentFragment()
Erzeugt ein neues Dokumentfragment, das verwendet werden kann, um Teile des Dokuments zu halten, z.B. bei komplexen Manipulationen des Dokumentbaums.
QDomElement QDomDocument::createElement(const QString &tagName)
Erzeugt ein neues Element namens tagName, das in den DOM-Baum eingefügt werden kann, z. B. mit QDomNode::appendChild().
Wenn tagName kein gültiger XML-Name ist, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch createElementNS(), QDomNode::appendChild(), QDomNode::insertBefore(), und QDomNode::insertAfter().
QDomElement QDomDocument::createElementNS(const QString &nsURI, const QString &qName)
Erzeugt ein neues Element mit Namespace-Unterstützung, das in den DOM-Baum eingefügt werden kann. Der Name des Elements ist qName und der Namespace-URI ist nsURI. Diese Funktion setzt auch QDomNode::prefix() und QDomNode::localName() auf die entsprechenden Werte (abhängig von qName).
Wenn qName eine leere Zeichenkette ist, wird ein Nullelement zurückgegeben, unabhängig davon, ob die Richtlinie für ungültige Daten gesetzt ist.
Siehe auch createElement().
QDomEntityReference QDomDocument::createEntityReference(const QString &name)
Erzeugt eine neue Entity-Referenz namens name, die in das Dokument eingefügt werden kann, z. B. mit QDomNode::appendChild().
Wenn name kein gültiger XML-Name ist, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch QDomNode::appendChild(), QDomNode::insertBefore(), und QDomNode::insertAfter().
QDomProcessingInstruction QDomDocument::createProcessingInstruction(const QString &target, const QString &data)
Erzeugt eine neue Verarbeitungsanweisung, die in das Dokument eingefügt werden kann, z. B. mit QDomNode::appendChild(). Diese Funktion setzt das Ziel für die Verarbeitungsanweisung auf target und die Daten auf data.
Wenn target kein gültiger XML-Name ist oder die Daten Zeichen enthalten, die in einer Verarbeitungsanweisung nicht vorkommen dürfen, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch QDomNode::appendChild(), QDomNode::insertBefore(), und QDomNode::insertAfter().
QDomText QDomDocument::createTextNode(const QString &value)
Erzeugt einen Textknoten für die Zeichenkette value, der in den Dokumentenbaum eingefügt werden kann, z.B. mit QDomNode::appendChild().
Wenn value Zeichen enthält, die nicht als Zeichendaten eines XML-Dokuments (auch nicht in Form von Zeichenreferenzen) gespeichert werden können, richtet sich das Verhalten dieser Funktion nach QDomImplementation::InvalidDataPolicy.
Siehe auch QDomNode::appendChild(), QDomNode::insertBefore(), und QDomNode::insertAfter().
QDomDocumentType QDomDocument::doctype() const
Gibt den Dokumenttyp dieses Dokuments zurück.
QDomElement QDomDocument::documentElement() const
Gibt das Wurzelelement des Dokuments zurück.
QDomElement QDomDocument::elementById(const QString &elementId)
Gibt das Element zurück, dessen ID gleich elementId ist. Wurde kein Element mit der ID gefunden, gibt diese Funktion ein null element zurück.
Da die QDomClasses nicht wissen, welche Attribute Element-IDs sind, gibt diese Funktion immer ein null element zurück. Dies kann sich in einer zukünftigen Version ändern.
QDomNodeList QDomDocument::elementsByTagName(const QString &tagname) const
Gibt eine QDomNodeList zurück, die alle Elemente des Dokuments mit dem Namen tagname enthält. Die Reihenfolge der Knotenliste entspricht der Reihenfolge, in der sie bei einem Preorder-Traversal des Elementbaums gefunden werden.
Siehe auch elementsByTagNameNS() und QDomElement::elementsByTagName().
QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)
Gibt ein QDomNodeList zurück, das alle Elemente des Dokuments mit dem lokalen Namen localName und einer Namespace-URI von nsURI enthält. Die Reihenfolge der Knotenliste entspricht der Reihenfolge, in der sie bei einem Preorder-Traversal des Elementbaums gefunden werden.
Siehe auch elementsByTagName() und QDomElement::elementsByTagNameNS().
QDomImplementation QDomDocument::implementation() const
Gibt ein QDomImplementation Objekt zurück.
QDomNode QDomDocument::importNode(const QDomNode &importedNode, bool deep)
Importiert den Knoten importedNode aus einem anderen Dokument in dieses Dokument. importedNode verbleibt im Originaldokument; diese Funktion erstellt eine Kopie, die in diesem Dokument verwendet werden kann.
Diese Funktion gibt den importierten Knoten zurück, der zu diesem Dokument gehört. Der zurückgegebene Knoten hat keinen übergeordneten Knoten. Es ist nicht möglich, die Knoten QDomDocument und QDomDocumentType zu importieren. In diesen Fällen gibt diese Funktion einen null node zurück.
Wenn importedNode ein null node ist, wird ein Null-Knoten zurückgegeben.
Wenn deep wahr ist, importiert diese Funktion nicht nur den Knoten importedNode, sondern seinen gesamten Teilbaum; wenn sie falsch ist, wird nur der importedNode importiert. Das Argument deep hat keine Auswirkung auf die Knoten QDomAttr und QDomEntityReference, da die Nachkommen der Knoten QDomAttr immer importiert werden und die der Knoten QDomEntityReference nie importiert werden.
Das Verhalten dieser Funktion ist je nach Knotentyp leicht unterschiedlich:
Knotentyp | Verhalten |
---|---|
QDomAttr | Das Eigentümer-Element wird auf 0 gesetzt und das angegebene Flag wird im generierten Attribut auf true gesetzt. Bei Attributknoten wird immer der gesamte Teilbaum von importedNode importiert: deep hat keine Auswirkung. |
QDomDocument | Dokumentenknoten können nicht importiert werden. |
QDomDocumentFragment | Wenn deep wahr ist, importiert diese Funktion das gesamte Dokumentfragment; andernfalls erzeugt sie nur ein leeres Dokumentfragment. |
QDomDocumentType | Dokumenttyp-Knoten können nicht importiert werden. |
QDomElement | Attribute, für die QDomAttr::specified() wahr ist, werden ebenfalls importiert, andere Attribute werden nicht importiert. Wenn deep wahr ist, importiert diese Funktion auch den Teilbaum von importedNode; andernfalls importiert sie nur den Elementknoten (und einige Attribute, siehe oben). |
QDomEntity | Entity-Knoten können importiert werden, aber im Moment gibt es keine Möglichkeit, sie zu verwenden, da der Dokumenttyp in DOM Level 2 schreibgeschützt ist. |
QDomEntityReference | Nachkommen von Entity-Referenzknoten werden nie importiert: deep hat keinen Effekt. |
QDomNotation | Notationsknoten können importiert werden, aber im Moment gibt es keine Möglichkeit, sie zu verwenden, da der Dokumenttyp in DOM Level 2 schreibgeschützt ist. |
QDomProcessingInstruction | Das Ziel und der Wert der Verarbeitungsanweisung werden in den neuen Knoten kopiert. |
QDomText | Der Text wird in den neuen Knoten kopiert. |
QDomCDATASection | Der Text wird in den neuen Knoten kopiert. |
QDomComment | Der Text wird in den neuen Knoten kopiert. |
Siehe auch QDomElement::setAttribute(), QDomNode::insertBefore(), QDomNode::insertAfter(), QDomNode::replaceChild(), QDomNode::removeChild(), und QDomNode::appendChild().
QDomNode::NodeType QDomDocument::nodeType() const
Rückgabe DocumentNode
.
QByteArray QDomDocument::toByteArray(int indent = 1) const
Konvertiert das geparste Dokument zurück in seine Textdarstellung und gibt ein QByteArray zurück, das die als UTF-8 kodierten Daten enthält.
Diese Funktion verwendet indent als Leerzeichen für die Einrückung von Unterelementen.
Siehe auch toString().
QString QDomDocument::toString(int indent = 1) const
Konvertiert das geparste Dokument zurück in seine textuelle Darstellung.
Diese Funktion verwendet indent als die Menge an Leerzeichen, um Unterelemente einzurücken.
Ist indent gleich -1, wird überhaupt kein Leerzeichen hinzugefügt.
QDomDocument &QDomDocument::operator=(const QDomDocument &other)
Weist other diesem DOM-Dokument zu.
Die Daten der Kopie werden gemeinsam genutzt (flache Kopie): Die Änderung eines Knotens wird auch den anderen verändern. Wenn Sie eine tiefe Kopie erstellen möchten, verwenden Sie cloneNode().
© 2025 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.