0

我的本地机器中有 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 文件数据转换为字符串格式。喜欢:

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

3 回答 3

1

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

于 2016-12-16T07:45:07.363 回答
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

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

于 2016-12-16T07:52:50.483 回答
0

您代码的问题是您只处理文本行,而没有 xml 类处理的任何 xml 语法。

您应该查看Florent Uguet 为其提供了一些链接的 QtXML 类。

但是,我修改了此处找到的示例以执行您想要的操作(它为您的确切输入做了确切的事情):

#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 文件。

于 2016-12-16T08:21:23.547 回答