QXmlQuery和Xpath:无法提取节点’;s文本或参数’;s值
我试图从xml内容中提取一些数据。因此,我使用QXmlQuery并编写了下面的代码(在Qt5中)。问题是:QXmlQuery和Xpath:无法提取节点’;s文本或参数’;s值,xml,xpath,qtxml,Xml,Xpath,Qtxml,我试图从xml内容中提取一些数据。因此,我使用QXmlQuery并编写了下面的代码(在Qt5中)。问题是: 如果我试图提取text1(因此节点的文本,请参见第32行),代码将返回整个节点:text1 =>问题1:如何仅获取文本1 如果我试图提取x1(参数值,见第35行),代码将返回错误: 中的错误SENR0001file:///C:/work/tests/build-TestXMLParser Desktop Debug/Debug/TestXMLParser.exe,第1行第1列:无法序列化属
text1
(因此节点的文本,请参见第32行),代码将返回整个节点:text1
x1
(参数值,见第35行),代码将返回错误:
中的错误SENR0001file:///C:/work/tests/build-TestXMLParser Desktop Debug/Debug/TestXMLParser.exe,第1行第1列:无法序列化属性参数,因为它显示在顶层#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();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
qstringxmlcontent=
""
""
“文本1”
""
""
“文本2”
""
"";
缓冲装置;
setData(QByteArray(xmlContent.toUtf8().constData());
device.open(QIODevice::ReadOnly);
QXmlQuery查询;
query.bindVariable(“inputDocument”和设备);
//提取“text1”
query.setQuery(QString(“doc($inputDocument)/nodes/node1/value[text()]”);
//提取“x1”
//setQuery(QString(“doc($inputDocument)/nodes/node1/@param”);
//产值
QByteArray阵列外阵列;
QBuffer缓冲区(&outArray);
打开(QIODevice::ReadWrite);
QXmlSerializer序列化程序(查询和缓冲区);
query.evaluateTo(&序列化程序);
buffer.close();
qWarning()我目前正在使用QXmlQuery
并且有相同的问题。对于text1:
我会给你想要的
对于属性x1,您必须执行以下操作:
query.evaluateTo(&any_QString_variable);
查询后,您必须将结果存储到某个地方才能使用它。也许我误解了您的问题,但这些都是您的价值所在
query.evaluateTo(&any_QString_variable);