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

Posted

技术标签:

【中文标题】如何在QT中将xml节点数据转换为字符串[重复]【英文标题】:How to convert xml node data into string in QT [duplicate] 【发布时间】:2016-12-16 07:30:11 【问题描述】:

我的本​​地机器中有 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";


【问题讨论】:

【参考方案1】:

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

【讨论】:

您仍然可以通过添加一些代码和指向有关如何使用 QXmlStreamReader 的示例的指针来改进您的答案,例如walletfox.com/course/qxmlstreamreaderexample.php【参考方案2】:

您的代码的问题是您只处理文本行,而没有 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 文件中。

【讨论】:

谢谢先生的回复。在您的代码中我有 n 错误:错误:'stringTags' 没有命名类型 我的代码是为 C++11 编写的,如果您使用 g++ 作为编译器,您需要使用标志 -std=c++11 启用它。如果您没有 c++11 的编译器,则需要将“auto”关键字替换为调用函数返回的类型:例如 QDomElement。【参考方案3】:

已经问过(并带有代码):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

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

【讨论】:

以上是关于如何在QT中将xml节点数据转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中将 XML 字符串转换为 DOMDocument?

在 Groovy 中将字符串 XML 片段转换为文档节点

在 Python 中将 XML/HTML 实体转换为 Unicode 字符串 [重复]

在 Python 中将 XML/HTML 实体转换为 Unicode 字符串 [重复]

如何在qt中将字符串转换为qwidget

如何在Python中将字符串转换为数据框[重复]