mafulechka
07 грудня 2019 р. 19:11

Парсинг XML з Qt: оновлення для Qt 6

Пройшло багато часу з того часу, як у статтях стосувалися парсингу XML-документів за допомогою Qt. Хотілося б розповісти деякі нові новини про очікувані зміни в наступних випусках. Але спочатку давайте підіб'ємо підсумки того, що в даний час Qt надає для читання та запису документів XML.


Модуль Qt XML

Цей модуль надає реалізацію для двох різних моделей для читання та запису файлів XML: об'єктна модель документа (Document Object Model DOM) та простий API для XML (SAX). У моделі DOM повний XML-файл завантажується в пам'ять і представляється як дерева, що забезпечує легкий доступ і маніпулювання його вузлами. DOM, як правило, використовується в програмах, де ви не дбаєте про пам'ять. З іншого боку, SAX є аналізатором XML на основі подій і не завантажує весь XML-документ на згадку. Натомість він генерує події для токенів під час парсингу, і користувач може обробити ці події. Програма повинна реалізувати інтерфейси обробника (цілком або частково з використанням QXmlDefaultHandler). Багато людей вважають це незручним, так як це змушує їх структурувати свій код навколо цієї моделі.

Інша проблема полягає в тому, що поточна реалізація SAX (і, як наслідок, DOM, оскільки вона реалізована з використанням SAX) не є повністю сумісною зі стандартом XML. Зважаючи на ці недоліки, Qt більше не рекомендує використовувати SAX, і було прийнято рішення відмовитися від цих класів, починаючи з Qt 5.15.

QXmlStreamReader і QXmlStreamWriter

На щастя, Qt надає потокові класи XML, як зручнішу та суміснішу зі стандартом XML альтернативу для роботи з файлами XML.

Що зміниться в Qt 6?

Як уже згадувалося вище, класи SAX незабаром будуть застарілими, що означає, що QDomDocument більше не зможе їх використовувати. Саме тому він був повторно реалізований з використанням QXmlStreamReader. Qt 6 переключиться на нову реалізацію, але старіші версії Qt, як і раніше, будуть використовувати стару реалізацію, оскільки нова принесе кілька поведінкових змін, а розробники не хочуть робити це до Qt 6.

Що ця зміна означає для користувачів Qt DOM? Оскільки QXmlStreamReader більш точно слід специфікації XML, QDomDocument буде робити те саме, починаючи з Qt 6. Це означатиме наступні зміни поведінки для QDomDocument:

Значення атрибутів будуть нормалізовані . Наприклад, буде еквівалентним .
Ідентичні кваліфіковані імена атрибутів більше не будуть дозволені , тобто атрибути елемента повинні мати унікальні імена.
оголошені префікси простору імен більше не будуть дозволені .

Якщо ви використовуєте QDomDocument та покладаєтеся на будь-який з них, розгляньте можливість оновлення вашого коду та XML-документів відповідним чином.

Рекомендовані статті на цю тему

По статті запитували0питання

3

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up