mafulechkaDec. 7, 2019, 8:11 a.m.

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

Content

Прошло много времени с тех пор, как в статьях касались парсинга 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-документов соответствующим образом.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
Support the author Donate

Comments

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

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
SG

C++ - Тест 003. Условия и циклы

  • Result:0points,
  • Rating points-10
a

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
M
  • Mili
  • Feb. 18, 2021, 9:22 a.m.

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
Last comments
t
  • t1m4
  • Feb. 24, 2021, 2:56 a.m.

Django - Tutorial 052. Redefining a User Model

В данном случае я заходил под superuser но все равно не появлялись эти поля

Django - Tutorial 001. Deploying a site on Django + PostgreSQL + Gunicorn + Nginx

Поднял сервис с помощью systemd, вот по этому мануалу: https://habr.com/ru/post/501414/
t
  • t1m4
  • Feb. 23, 2021, 7:11 a.m.

Django - Tutorial 052. Redefining a User Model

А как дать ему эти права?

Django - Tutorial 001. Deploying a site on Django + PostgreSQL + Gunicorn + Nginx

Всё по мануалу выше, буква в букву. gunicorn mysite.wsgi:application server { listen 80; server_name 10.0.3.15; access_log /var/log/nginx/example.log; locat…
Now discuss on the forum
M

нужна помощь с проектом qt c++

дали задание, на несколько дней. собираюсь делать, но хотел бы получить помощь более опытных людей, чтобы подкорректировать себя и подстраховаться. каким образом это можно сделать? …

QScrollArea dynamically add QCheckBoxes

Всё правильно. Это просто спамер, который отправился в вечный бан.
Ds

При рендере тайлов появляется buffer reallocation

upd. с помощью double commander в сырцах OpenStreetMap плагина нашёл такую функцию size_t CoordBuffer::PushCoord(double x, double y) { if (usedPoints>=bufferSize) { buff…
GF

Сигналы и слоты в PyQt5

Решение стало следующим: после конвертации файла Ui из QtDesigner мне никак не выгодно продолжать работать в этом же файле, т.к. я постоянно продолжаю дорабатывать интерфейс, а его поведение я о…

Получение даты сборки программы

Проблему решил так: В .pro файле: VERSION = 1.2.3DEFINES += APP_VERSION=\\\"$$VERSION\\\"#Формирование даты и времени сборки (меняется при полной пересборке проекта)win32:{BLD_DATE=…
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB