首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QXmlQuery和Xpath :不能提取节点的文本或参数的值

QXmlQuery和Xpath :不能提取节点的文本或参数的值
EN

Stack Overflow用户
提问于 2015-02-19 11:07:40
回答 1查看 307关注 0票数 0

我正在尝试从xml内容中提取一些数据。所以我使用了QXmlQuery并编写了下面的代码(在Qt5中)。问题是:

  1. 如果我试图提取text1 (所以是节点的文本,参见第32行),代码将返回整个节点:<value>text1</value>

=>问题1:如何只获取text1?

  1. 如果我试图提取file:///C:/work/tests/build-TestXMLParser-Desktop-Debug/debug/TestXMLParser.exe,(因此参数的值,请参见第35行),代码将在第1行的x1中返回一个错误: error SENR0001,第1列:属性param不能序列化,因为它出现在顶层。

=>问题2:我做错了什么?

以下是代码:

代码语言:javascript
复制
#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(&#41;;
}
EN

回答 1

Stack Overflow用户

发布于 2015-08-18 08:09:52

我目前正在使用QXmlQuery,并且遇到了同样的问题。对于text1

代码语言:javascript
复制
query.setQuery("doc($inputDocument)/nodes/node1/value/string()");
query.evaluateTo(&any_QString_variable);

会给你你想要的。

对于属性x1,您必须这样做:

代码语言:javascript
复制
query.evaluateTo(&any_QString_variable);

查询之后,您必须将结果存储在的某个地方使用它。也许我误解了你的问题,但这些,给了你你的价值观。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28604756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档