Как автоматически отформатировать и сделать отступ XML-строки?

Я делаю свои первые шаги с Qt4.8.6 под Debian 7 на данный момент, и мне очень нравится! Но теперь мне нужно немного помочь с этой проблемой:

Мое приложение подключается к серверу и запускает запрос данных. Затем данные XML отправляются обратно в один или несколько пакетов TCP в мое приложение, где они собираются в полное «сообщение», которое представляет собой не что иное, как правильно сформированный документ XML, содержащий запрошенные данные.

Прием данных работает безупречно, но теперь я хочу отображать полученные данные XML в удобной форме для целей отладки и т. Д. Проблема: у меня есть данные XML в простой строке QString, и я не хочу начинать украшать их с помощью рука с моей собственной рутиной. Я видел, что есть XmlStreamWriter, который предлагает автоматическое форматирование. Звучит неплохо! Но как я могу «кормить» его своими данными XML и позволить выводить отформатированные данные в другую строку QString?

void MainWindow::displayMessage(QString message)
{
QString formattedOutput;

QXmlStreamReader xmlreader(message);

QXmlStreamWriter xmlwriter(&formattedOutput);
xmlwriter.setAutoFormatting(true);

ResponseTextEdit->append(formattedOutput);
}

Мне почему-то не хватает ссылки: данные XML уже присутствуют, их также можно прочитать XmlReader. XmlWriter настроен для записи в QString formattedOutput и также настроен на автоматическое форматирование вывода. Но как я могу получить свои данные XML в xmlwriter !? Или это совершенно неправильный подход, и есть более простой способ вывода XML из строки в упорядоченной форме?

Заранее спасибо за помощь!

4

Решение

Считыватели потоков XML & писатели слишком низкоуровневы для вашей цели; вам придется скопировать вручную из читателя в писатель.

Вам лучше создать документ DOM из вашей строки и сохранить его. Что-то вроде этого:

void MainWindow::displayMessage(QString message)
{
QString formattedOutput;

QDomDocument doc;
doc.setContent(message, false);

QTextStream writer(&formattedOutput);
doc.save(writer, 4);  //or whatever indentation you want

ResponseTextEdit->append(formattedOutput);
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector