При добавлении контента в xml файл, каждый раз меняется последовательность атрибутов внутри тега
Всем доброго времени суток.
Есть вот такой код, который добавляет к тегу атрибуты.
QDomElement domElementFigure = domdocument.createElement("figure"); // проверка наличия атрибутов у объекта figure if(figureobject.getFigureAttrMap() != nullptr) { auto figureAttrMap = figureobject.getFigureAttrMap(); QMap<QString, QString>::iterator it = figureAttrMap->begin(); for(;it != figureAttrMap->end();++it){ domElementFigure.setAttribute(it.key(), it.value()); } }
Затем, тег кладется в документ и затем этот контент пишется в файл:
QFile file(filename); if(file.open(QIODevice::WriteOnly)) { QTextStream(&file) << doc.toString().toUtf8(); file.close(); }
Но, если повторно запустить код на выполнение содержимое файла XML остается неизменным, но меняется последовательность расположения атрибутов внутри тега. Я сначала грешил, что при записи атрибутов тега я использовал QMap для формирования словаря атрибутов для определенного тега. Я уже здесь задавал вопрос, касательно
QMapи мне посоветовали исользовать
QList<QPair<QString, QString>>, чтобы последовательность не нарушалась и была всегда одинаковой.
Однако выяснилось, что последовательность записываемых атрибутов тоже нарушается. Выяснили опытным путем, что последовательность меняется при выполнении этого участка:
auto figureAttrMap = figureobject.getFigureAttrMap(); QMap<QString, QString>::iterator it = figureAttrMap->begin(); for(;it != figureAttrMap->end();++it){ domElementFigure.setAttribute(it.key(), it.value()); }
Как сделать так, чтобы последовательность атрибутов не нарушалась? Или этого сделать нельзя? Еще раз скажу, что содержимое файла при этом остается неизменным, а меняется последовательность атрибутов внутри тега.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- sdfsdfkp fgskpgokspdog
- 14 жовтня 2024 р. 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:90бали,
- Рейтинг балів8
- Максим Васильев
- 02 жовтня 2024 р. 04:14
Qt - Тест 001. Сигналы и слоты
- Результат:68бали,
- Рейтинг балів-1
- Лев Семенов
- 30 вересня 2024 р. 11:04
C++ - Тест 001. Первая программа и типы данных
- Результат:53бали,
- Рейтинг балів-4
Добрый день. Никак. От слова совсем. В документации сказано, что последовательность атрибутов не является гарантированной.
Мы у себя столкнулись с такой проблемой в проекте и пришли к выводу, что или принять это как данность, или использовать любой другой парсер, который гарантирует последовательность атрибутов. Либо пересмотреть логику программы и не завязываться на последовательность атрибутов.
Евгений, доброе утро.
Спасибо за исчерпывающий ответ. А любой другой парсер - это из арсенала, который предоставляет Qt, я так понимаю?
скорее нет. в библиотеке boost есть xml парсер. но как он работает с атрибутами и созраняет ли их последовательность - не знаю. либо свой писать, но тоже сомнительное удовольствие.