2016-12-16 129 views
0

我的本地機器中有xml文件。 xml文件格式如下:如何將xml節點數據轉換爲QT中的字符串

<string> 
     <Data> 
       <Name>Sanket</Name> 
       <Number>0987654321</Number> 
       <Address>India</Address> 
     </Data> 
     <Data> 
       <Name>Rahul</Name> 
       <Number>0987654321</Number> 
       <Address>Maharashtra</Address> 
     </Data> 
</string> 

我想將此XML文件數據轉換爲字符串格式。像:

Sanket 0987654321 India Rahul 0987654321 Maharashtra

什麼是用C++在QT這個數據轉換的最簡單方法。 我是新的,所以請任何人都可以爲我推薦一些示例代碼? 預先感謝您。

我嘗試下面的代碼,但是這對我來說不是工作:

void parseFile() 
{ 
QList<QList<QString> > dataSet; 

QString lastError = ""; 
QFile inFile("test.xml"); 
if (inFile.open(QIODevice::ReadOnly)) 
{ 
    QTextStream fread(&inFile); 
    long totalSize = inFile.size(); 
    QString line; 
    while(!fread.atEnd()) 
    { 
     line = fread.readLine(); 
     QList<QString> record = line.split(QString::KeepEmptyParts); 
     dataSet.append(record); 

    } 
    qDebug()<<dataSet; 
}else{ 
    lastError = "Could not open "+test.xml+" for reading"; 
} 
} 

回答

1

你可以通過QXmlStreamReader首先解析XML元素,然後就可以組裝XML元素融入你怎麼想的字符串。

+1

您仍然可以通過添加一些關於如何使用QXmlStreamReader的例子的代碼和指針來改善您的答案,例如, http://www.walletfox.com/course/qxmlstreamreaderexample.php – talamaki

0

你的代碼問題是你只處理文本行而沒有任何由xml類處理的xml語法。

你應該看看Florent Uguet提供了一些鏈接的QtXML類。

但是我修改的例子中發現here做你想做什麼(它確實是千真萬確的事情爲您的確切輸入):

#include <QDomDocument> 
#include <QFile> 
#include <iostream> 
#include <QDomNodeList> 

int main() 
{ 
    QDomDocument doc("mydocument"); 
    QFile file("test.xml"); 
    if (!file.open(QIODevice::ReadOnly)) 
     return 1; 
    if (!doc.setContent(&file)) { 
     file.close(); 
     return 1; 
    } 
    file.close(); 

    const auto stringTags = doc.elementsByTagName("string"); 

    for(int stringsI = 0; stringsI < stringTags.size(); ++stringsI){ 
     QDomNode stringTag = stringTags.at(stringsI); 
     for(QDomNode dataTag = stringTag.firstChildElement("Data"); !dataTag.isNull(); dataTag = dataTag.nextSiblingElement("Data")){ 
      for(QDomNode innerTag = dataTag.firstChild(); !innerTag.isNull(); innerTag = innerTag.nextSibling()){ 
       auto val = innerTag.toElement().text(); 
       std::cout << val.toStdString() << " "; 
      } 
      std::cout << std::endl; 
     } 
    } 

    return 0; 
} 

我學會使用qmake與QtCreator建立它。爲此,您應該知道您需要將QT += xml放在* .pro文件中。

+0

謝謝主席的回覆。在你的代碼中,我有n個錯誤:錯誤:'stringTags'沒有命名一個類型 –

+0

我的代碼是爲C++ 11編寫的,如果你使用g ++作爲編譯器,你需要使用flag -std = C++ 11 。如果您沒有用於C++ 11的編譯器,則需要用被調用函數返回的類型(例如QDomElement)替換「auto」關鍵字。 –

相關問題