Изменения в Qt XML
Qt 6 — результат осознанной работы по повышению эффективности и удобства использования фреймворка.
Мы стараемся сохранять бинарную и исходную совместимость для всех публичных API в каждом релизе. Но некоторые изменения были неизбежны, чтобы сделать Qt лучшим фреймворком.
В этой теме мы обобщаем эти изменения в Qt XML и предоставляем руководство по их обработке.
Простое API для парсера XML (SAX)
QXmlStreamReader
В Qt6 все SAX классы были удалены из Qt XML, пожалуйста, используйте QXmlStreamReader для чтения XML-файлов. Вот несколько простых шагов по переносу вашего текущего кода на QXmlStreamReader:
Например, если у вас есть код, как
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
} вы можете переписать его как
QFile file = ...;
QXmlStreamReader reader(&file);
while (!reader.atEnd()) {
reader.readNext();
... // do processing
}
if (reader.hasError()) {
... // do error handling
} QDom и QDomDocument
В Qt6, SAX классы были удалены, и поэтому QDomDocument больше не может их использовать. Именно поэтому он был перереализован с использованием QXmlStreamReader. Это приводит к некоторым изменениям в поведении:
- Значения атрибутов будут нормализованы. Например,
<tag attr=" a \n b " />будет эквивалентно<tag attr="a b"/>. - Идентичные квалифицированные имена атрибутов больше не будут разрешены, т.е. атрибуты элемента должны иметь уникальные имена.
- Необъявленные префиксы имен пространств имён больше не будут разрешены.
Если вы используете QDomDocument и полагаетесь на какой-либо из этих аспектов, пожалуйста, обновите свой код и XML-документы соответственно.
Библиотека совместимости Qt Core5
Если ваше приложение или библиотека не могут быть перенесены прямо сейчас, QXmlSimpleReader и связанные классы всё ещё существуют в Qt5Compat для поддержания работы старых кодовых баз. Если вы хотите продолжать использовать эти классы SAX, вам нужно связаться с новым модулем Qt5Compat и добавить эту строку в ваш qmake .pro файл:
QT += core5compat
В случае, если вы уже перенесли своё приложение или библиотеку в систему сборки cmake, добавьте следующее в ваш CMakeList.txt:
PUBLIC_LIBRARIES
Qt::Core5Compat
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/xml-changes-qt6.html