我试图从xml内容中提取一些数据。所以我使用了QXmlQuery并编写了下面的代码(在Qt5中)。问题是:
text1
(所以节点的文本,请参阅第32行),代码会返回整个节点:<value>text1</value>
=&GT;问题1:如何只获得text1?
x1
(所以参数的值,请参阅第35行),代码会返回一个错误:
文件中的错误SENR0001:/// C:/work/tests/build-TestXMLParser-Desktop-Debug/debug/TestXMLParser.exe,第1行第1列:属性参数无法序列化,因为它出现在顶层。 =&GT;问题2:我做错了什么?
以下是代码:
#include <QApplication>
#include <QFile>
#include <QDebug>
#include <QXmlQuery>
#include <QXmlSerializer>
#include <QXmlFormatter>
#include <QBuffer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString xmlContent =
"<nodes>"
"<node1 param='x1'>"
"<value>text1</value>"
"</node1>"
"<node2 param='x2'>"
"<value>text2</value>"
"</node2>"
"</nodes>";
QBuffer device;
device.setData(QByteArray(xmlContent.toUtf8().constData()));
device.open(QIODevice::ReadOnly);
QXmlQuery query;
query.bindVariable("inputDocument", &device);
// Extracting "text1"
query.setQuery(QString("doc($inputDocument)/nodes/node1/value[text()]"));
// Exracting "x1"
//query.setQuery(QString("doc($inputDocument)/nodes/node1/@param"));
// Output value
QByteArray outArray;
QBuffer buffer(&outArray);
buffer.open(QIODevice::ReadWrite);
QXmlSerializer serializer(query, &buffer);
query.evaluateTo(&serializer);
buffer.close();
qWarning() << "Exracted value : " << QString::fromUtf8(outArray.constData());
exit(0);
return a.exec();
}
答案 0 :(得分:0)
我目前正在使用QXmlQuery
并遇到同样的问题。对于 text1 :
query.setQuery("doc($inputDocument)/nodes/node1/value/string()");
query.evaluateTo(&any_QString_variable);
会给你想要的东西。
对于属性 x1 ,你必须这样做:
query.evaluateTo(&any_QString_variable);
查询后,您必须存储某处的结果才能使用它。也许我误解了你的问题,但这些,给你你的价值观。