При добавлении контента в 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 хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
- Akiv Doros
- Қар. 11, 2024, 2:58 Т.Қ.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:50ұпай,
- Бағалау ұпайлары-4
- molni99
- Қаз. 26, 2024, 1:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
- molni99
- Қаз. 26, 2024, 1:29 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:20ұпай,
- Бағалау ұпайлары-10
Добрый день. Никак. От слова совсем. В документации сказано, что последовательность атрибутов не является гарантированной.
Мы у себя столкнулись с такой проблемой в проекте и пришли к выводу, что или принять это как данность, или использовать любой другой парсер, который гарантирует последовательность атрибутов. Либо пересмотреть логику программы и не завязываться на последовательность атрибутов.
Евгений, доброе утро.
Спасибо за исчерпывающий ответ. А любой другой парсер - это из арсенала, который предоставляет Qt, я так понимаю?
скорее нет. в библиотеке boost есть xml парсер. но как он работает с атрибутами и созраняет ли их последовательность - не знаю. либо свой писать, но тоже сомнительное удовольствие.