QString в XML в QT - PullRequest
       12

QString в XML в QT

1 голос
/ 06 июля 2011

Мне нужно создать файл XML в QT, но я не использую классы QT XML для создания данных XML, но я создаю строки вручную (который содержит XML) и записываю их в файл, причина того, что классы QT не используются есть, мне нужно сохранить порядок атрибутов, но если я использую классы QT XMl, он записывает атрибут в случайном порядке.

До сих пор все было хорошо, пока я не получил текст HTML, который будет записан как значение тега в XML. мне нужно записать данные HTML, так как классы QT XMl пишут, например, «Это <Тестовые данные>» и должны быть записаны как «Это & lt: Тестовые данные & gt». здесь я заменил ";" с ":" для понимания цели.

Может ли кто-нибудь помочь мне с любой функцией в QString, которая может обнаружить XMl и преобразовать его перед записью в файл или во время записи в файл?

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

Чек QXmlStreamReader и QXmlStreamWriter классы.Они в QtCore и действительно полезны для обработки XML.

Вы должны сделать что-то вроде этого:

QString string;
QXmlStreamWriter writer(&string);
// use QXmlStreamWriter class to generate the XML
writer.setAutoFormatting(true);
writer.writeStartDocument();
...
writer.writeStartElement("html");
writer.writeStartElement("a");
writer.writeAttribute("href", "http://example.com/");
writer.writeCharacters("My wonderful link");
writer.writeEndElement(); // a
writer.writeEndElement(); // html
...
writer.writeEndDocument();
0 голосов
/ 06 июля 2011

Поскольку ваша проблема в том, что вы не можете использовать классы QT XML из-за его поведения, я предполагаю, что у вас нет проблем с использованием модуля QT XML в вашем проекте. Единственный способ, который я могу придумать, - это проверять код и проверять его как действительный XML (только синтаксис).

QString test = "<TestData>Valid XML</TestData>";
QString wrapper_start = "<?xml version=\"1.0\"?><dummyrootelement>";
QString wrapper_end = "</dummyrootelement>";
QDomDocument document;
if(document.setContent(wrapper_start + test + wrapper_end)) {
    // Valid XML, handle test here
} else {
    // Probably not valid XML
}

Причина, по которой вам нужны переменные wrapper_start и wrapper_end, заключается в том, что вы можете обрабатывать фрагменты XML между ними, вы можете рассматривать это как XML, который необходимо обработать:

<TestData>Data1</TestData><TestData>Data2</TestData>

, но при этом возникнет ошибка синтаксического анализа, поскольку документ XML должен иметь один корневой элемент.

Кроме того, обратите внимание, что вышеупомянутый метод не рекомендован мной, но я упомянул его, потому что я понимаю боль и сочувствую всем, кто должен поддерживать устаревшие системы. Если ваше приложение основано на упорядочении атрибутов, я настоятельно рекомендую вам хотя бы рассмотреть возможность пересмотра архитектуры вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...