【问题标题】:How to auto-format and indent XML from a string?如何从字符串中自动格式化和缩进 XML?
【发布时间】:2013-10-08 20:40:11
【问题描述】:

目前我正在 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?

提前感谢您的帮助!

【问题讨论】:

    标签: c++ xml qt4 code-formatting


    【解决方案1】:

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

    【讨论】:

    • 谢谢,成功了!顺便说一句:“QDomCoument”中有一个小错字,我无法编辑,也许您想更改它。
    • @Robert 谢谢,已修复。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多