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

Qt, XML, Parsing, 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-документов соответствующим образом.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Donate

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

v
9 апреля 2020 г. 5:41
vitalisimys

Qt - Тест 001. Сигналы и слоты

  • Результат:21баллов,
  • Очки рейтинга-10
v
9 апреля 2020 г. 5:36
vitalisimys

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:40баллов,
  • Очки рейтинга-8
v
9 апреля 2020 г. 5:32
vitalisimys

C++ - Тест 001. Первая программа и типы данных

  • Результат:53баллов,
  • Очки рейтинга-4
Последние комментарии
8 апреля 2020 г. 9:12
ogustbiller

Круто! Немного начинает проясняться что к чему. Спасибо.
K
7 апреля 2020 г. 8:55
KULINAR847

А вот уже и на python... #!/usr/bin/env python# -'''- coding: utf-8 -'''-import sysfrom PySide2.QtWidgets import *from PySide2.QtQuick import *from PySide2.QtCore import *from PySide2.…
3 апреля 2020 г. 8:06
Konstantin Grudnitskiy

Я надеюсь вы уже разобрались в чем дело, но если вдруг нет, то проблема состоит в том, что вы пытаетесь запустить программу из интерпретатора питона. Файл main.py это уже готова…
3 апреля 2020 г. 6:18
Konstantin Grudnitskiy

>>> text = 'hello world'>>> ' '.join(word for word in text.split()[:-1])'hello'>>> def remove_last_word(text):... return text and ' '.join(word for word in text.s…
27 марта 2020 г. 14:40
Евгений Легоцкой

Добрый день. В конце пятой статьи скачать можете.
Сейчас обсуждают на форуме
ДК
9 апреля 2020 г. 3:31
Джон Кофи

Привет. Делаю реализацию перемещения строк на QTableView с моделью QSqlTableModel. Буду в этой теме спрашивать нужное. Пока такой вопрос при создании модели: как мне узнать rowCount? int…
8 апреля 2020 г. 17:42
elyana

Подскажите как правильно реализовать... Нужно создать массив в C++ с переменными типа сhar или же int. В Qml будет переменная, например text, которая будет изменять своё значение в зависим…
ДК
8 апреля 2020 г. 6:29
Джон Кофи

:-D блин, без слов, пойду пройдусь))
s
8 апреля 2020 г. 4:59
slava_d2000

Всем привет. Прошу помощи.есть статическая сборка 5.14.2 (без SSL) компилируется чистый шаблон на QML и Widgets если войти на компьютер в терминальной сессии и запустить программ…
s
6 апреля 2020 г. 8:06
shuric

Добрый день. Объясните пожалуйста ... ... допиливать стилевое оформление в прокси классе ... где именно копать ? В каком виртуальном методе лучше допиливать (если можно н…
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB