如何在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?
在 Python 中将 XML/HTML 实体转换为 Unicode 字符串 [重复]