我的本地计算机上有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";
}
}
答案 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文件中。