Auf dieser Seite

Änderungen an Qt XML

Qt 6 sind das Ergebnis bewusster Bemühungen, das Framework effizienter und benutzerfreundlicher zu gestalten.

Wir bemühen uns, bei jeder Veröffentlichung die Binär- und Quellkompatibilität für alle öffentlichen APIs aufrechtzuerhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen und es an moderne Standards anzupassen.

Qt 6 wendet die XML 1.0-Regeln strenger an als Qt 5. In Qt 5 war der XML-Parser toleranter und ließ bestimmte Konstrukte zu, die nicht mit der XML 1.0-Spezifikation konform waren. Qt 6 korrigiert dieses Verhalten und stellt sicher, dass die XML-Verarbeitung dem Standard ordnungsgemäß folgt. Falls Ihre Anwendung auf einem Verhalten basiert, das in Qt 5 fälschlicherweise zugelassen war, müssen Sie möglicherweise Ihre XML-Dokumente oder Ihre Verarbeitungslogik entsprechend anpassen.

Weitere Einzelheiten zu den XML-1.0-Regeln finden Sie in der offiziellen W3C-XML-Spezifikation: Extensible Markup Language (XML) 1.0 (Fünfte Ausgabe)

In diesem Thema fassen wir diese Änderungen in „ Qt XML “ zusammen und geben Hinweise zu deren Handhabung.

Simple API for XML (SAX)-Parser

Alle SAX -Klassen wurden aus „ Qt XML “ entfernt. Verwenden Sie „ QXmlStreamReader “ zum Einlesen von XML-Dateien. Hier sind einige einfache Schritte zur Portierung Ihres aktuellen Codes auf „ QXmlStreamReader “:

Wenn Sie beispielsweise folgenden Code haben

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
}

können Sie ihn wie folgt umschreiben:

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 unter Verwendung von QXmlStreamReader neu implementiert. Dies führt zu einigen Änderungen im Verhalten:

  • Attributwerte werden normalisiert. So entspricht beispielsweise ` <tag attr=" a \n b " /> ` dem Ausdruck ` <tag attr="a b"/>`.
  • Identische qualifizierte Attributnamen sind nicht mehr zulässig. Das bedeutet, dass Attribute eines Elements eindeutige Namen haben müssen.
  • Nicht deklarierte Namespace-Präfixe sind nicht mehr zulässig.

Weitere Details finden Sie unter: Normalisierung von Attributwerten in XML 1.0

Steuerzeichen

In Qt 6 werden Steuerzeichen wie U+0000–U+001F, U+007F und U+0080–U+009F nun gemäß den XML 1.0-Regeln korrekt abgelehnt. In Qt 5 wurden sie fälschlicherweise zugelassen. Bevor Sie XML mit Qt 6 verwenden, stellen Sie sicher, dass Ihre XML-Dokumente nur gültige, XML 1.0-konforme Zeichen enthalten. Falls Steuerzeichen erforderlich sind, kodieren Sie diese im textsicheren Format.

Weitere Informationen finden Sie unter: Zeichen in XML 1.0

HTML-Entitäten in XML

In Qt 6 sind HTML-Entitäten nur noch gültig, wenn sie explizit in einer Dokumenttypdefinition (DTD) deklariert sind. In Qt 5 waren bestimmte HTML-spezifische Entitäten (z. B. &nbsp;) auch ohne Deklaration zulässig. Um die Kompatibilität in Qt 6 zu gewährleisten, verwenden Sie numerische Zeichenreferenzen, definieren Sie erforderliche Entitäten in einer DTD oder verarbeiten Sie das XML stattdessen als HTML, falls Ihr Inhalt auf HTML-Entitäten basiert.

Weitere Informationen finden Sie unter: Zeichenkodierung in Entitäten in XML 1.0

Textknoten, die ausschließlich aus Leerzeichen bestehen

Standardmäßig werden Textknoten, die ausschließlich Leerzeichen enthalten, entfernt und erscheinen nicht im „ QDomDocument “. In Qt 5 konnte dieses Verhalten über die Überladung von ` QDomDocument::setContent()` geändert werden, die die Übergabe eines ` QXmlReader ` ermöglichte. Diese Überladung wurde in Qt 6.0 entfernt, aber seit Qt 6.5 können Sie „ QDomDocument::ParseOption::PreserveSpacingOnlyNodes “ als Parsing-Option übergeben, um festzulegen, dass Textknoten, die ausschließlich aus Leerzeichen bestehen, beibehalten werden müssen.

Wenn Sie „ QDomDocument “ verwenden und sich auf eine dieser Funktionen stützen, müssen Sie Ihren Code und Ihre XML-Dokumente entsprechend anpassen.

Qt Core5-Kompatibilitätsbibliothek

Falls Ihre Anwendung oder Bibliothek derzeit nicht portiert werden kann, sind die „ QXmlSimpleReader “ und die zugehörigen Klassen weiterhin in „Qt5Compat“ vorhanden, um die Funktionsfähigkeit alter Codebasen zu gewährleisten. Wenn Sie diese SAX-Klassen weiterhin verwenden möchten, müssen Sie gegen das neue „Qt5Compat“-Modul linken und folgende Zeile in Ihre „qmake. .pro “-Datei einfügen:

QT += core5compat

Falls Sie Ihre Anwendung oder Bibliothek bereits auf das CMake-Build -System portiert haben, fügen Sie Folgendes zu Ihrer ` CMakeList.txt` hinzu:

PUBLIC_LIBRARIES
    Qt::Core5Compat

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