如何从字符串中自动格式化和缩进XML?

时间:2013-10-02 12:51:40

标签: c++ xml qt4 code-formatting

我现在正在使用Debian 7下的Qt4.8.6迈出第一步,我非常喜欢它!但现在我需要一点帮助来解决这个问题:

我的应用程序连接到服务器并触发数据请求。然后将XML数据以一个或多个TCP数据包的形式发送回我的应用程序,然后将其组合成一个完整的“消息”,这是一个包含所请求数据的格式良好的XML文档。

接收数据完美无瑕,但现在我想以一种很好的方式显示收到的XML数据以用于调试目的等。问题:我在简单的QString中有XML数据,我不想启动用我自己的惯例手工美化它。我已经看到有一个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?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

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);
}