Я делаю свои первые шаги с 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 из строки в упорядоченной форме?
Заранее спасибо за помощь!
Считыватели потоков 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);
}
Других решений пока нет …