0

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

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

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

  1. 如果我尝试提取x1(所以是参数的值,请参见第 35 行),代码会返回一个错误: 文件中的错误 SENR0001:///C:/work/tests/build-TestXMLParser-Desktop-Debug/debug/TestXMLParser。 exe,在第 1 行,第 1 列:属性参数无法序列化,因为它出现在顶层。

=>问题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(&#41;;
}
4

1 回答 1

0

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

query.setQuery("doc($inputDocument)/nodes/node1/value/string()");
query.evaluateTo(&any_QString_variable);

会给你想要的。

对于属性x1,您必须执行以下操作:

query.evaluateTo(&any_QString_variable);

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

于 2015-08-18T08:09:52.940 回答