如何在QT中将xml节点数据转换为字符串

时间:2016-12-16 07:30:12

标签: c++ xml qt qvector qxmlstreamreader

我的本​​地计算机上有xml文件。 xml文件格式如下:

<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文件数据转换为String格式。像:

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

3 个答案:

答案 0 :(得分:1)

您可以先通过QXmlStreamReader解析xml元素,然后根据需要将xml元素组合到字符串中。

答案 1 :(得分:0)

已经问过(和代码):Reading an XML file using QXmlStreamReader

Qt提供了一组用于处理XML的类:

http://doc.qt.io/qt-5.7/qtxml-index.html

http://doc.qt.io/qt-5.7/qxmlstreamreader.html

http://doc.qt.io/qt-5.7/qxmlstreamwriter.html

旧C ++类(未维护)

http://doc.qt.io/qt-5/qtxml-module.html

使用这些文件解析文件后,通常可以读取各个节点的内部文本或属性。

答案 2 :(得分: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文件中。