Die Änderungen an Qt XML

Qt 6 sind das Ergebnis des bewussten Bemühens, das Framework effizienter und benutzerfreundlicher zu gestalten.

Wir versuchen, die Binär- und Quellcodekompatibilität für alle öffentlichen APIs in jeder Version zu erhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.

In diesem Thema fassen wir diese Änderungen unter Qt XML zusammen und geben Anleitungen zu deren Handhabung.

Einfache API für XML (SAX) Parser

Alle SAX-Klassen wurden aus Qt XML entfernt. Verwenden Sie QXmlStreamReader zum Lesen von XML-Dateien. Hier sind einige einfache Schritte, um Ihren aktuellen Code auf QXmlStreamReader zu portieren:

Wenn Sie zum Beispiel einen Code wie

QFile *file = new QFile(...);
QXmlInputSource *source = new QXmlInputSource(file);

Handler *handler = new Handler;

QXmlSimpleReader xmlReader;
xmlReader.setErrorHandler(handler);
xmlReader.setContentHandler(handler);

if (xmlReader.parse(source)) {
    ... // do processing
} else {
    ... // do error handling
}

haben, können Sie ihn umschreiben als

QFile file = ...;
QXmlStreamReader reader(&file);

while (!reader.atEnd()) {
    reader.readNext();
    ... // do processing
}
if (reader.hasError()) {
    ... // do error handling
}

QDom und QDomDocument

Da die SAX-Klassen aus Qt XML entfernt wurden, wurde QDomDocument mit QXmlStreamReader neu implementiert. Dies führt zu einigen Änderungen im Verhalten:

  • Die Attributwerte werden normalisiert. Zum Beispiel ist <tag attr=" a \n b " /> äquivalent zu <tag attr="a b"/>.
  • Identische qualifizierte Attributnamen sind nicht mehr erlaubt. Das bedeutet, dass die Attribute eines Elements eindeutige Namen haben müssen.
  • Nicht deklarierte Namespace-Präfixe sind nicht mehr erlaubt.

Wenn Sie QDomDocument verwenden und sich auf einen dieser Punkte verlassen, müssen Sie Ihren Code und Ihre XML-Dokumente entsprechend aktualisieren.

Reine Textknoten mit Leerzeichen

Standardmäßig werden Textknoten, die nur Leerzeichen enthalten, entfernt und erscheinen nicht in QDomDocument. In Qt 5 konnte dieses Verhalten mit der Überladung QDomDocument::setContent() geändert werden, die die Übergabe eines QXmlReader erlaubte. Diese Überladung wurde in Qt 6.0 entfernt, aber seit Qt 6.5 können Sie QDomDocument::ParseOption::PreserveSpacingOnlyNodes als Parse-Option übergeben, um festzulegen, dass Textknoten, die nur Leerzeichen enthalten, erhalten bleiben müssen.

Qt Core5 Kompatibilitätsbibliothek

Wenn Ihre Anwendung oder Bibliothek nicht sofort portiert werden kann, gibt es noch die QXmlSimpleReader und verwandte Klassen in Qt5Compat, um alte Code-Basen am Laufen zu halten. Wenn Sie diese SAX-Klassen weiter verwenden wollen, müssen Sie gegen das neue Qt5Compat-Modul linken und diese Zeile zu Ihrer qmake .pro Datei hinzufügen:

QT += core5compat

Falls Sie Ihre Anwendung oder Bibliothek bereits auf das cmake-Build-System portiert haben, fügen Sie die folgende Zeile zu Ihrer CMakeList.txt hinzu:

PUBLIC_LIBRARIES
    Qt::Core5Compat

© 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.