2013-10-02 78 views
3

我現在正在使用Debian 7下的Qt4.8.6開始我的第一步,我非常喜歡它!但現在我需要這個問題的一些幫助:如何從字符串自動格式化和縮進XML?

我的應用程序連接到服務器並觸發數據請求。然後將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?

在此先感謝您的幫助!

回答

2

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

謝謝,這樣做!順便說一句:「QDomCoument」中有一個我無法編輯的錯字,也許你想改變它。 – Robert

+0

@Robert謝謝,修正。 – Angew

相關問題