0

XML コンテンツからデータを抽出しようとしています。そこで、QXmlQuery を使用して、以下のコードを (Qt5 で) 書きました。問題は次のとおりです。

  1. 抽出しようとするとtext1(ノードのテキスト、32行目を参照)、コードはノード全体を返します:<value>text1</value>

=> 質問 1: text1 のみを取得する方法は?

  1. 抽出しようとするとx1(パラメーターの値、35 行目を参照)、コードからエラーが返されます: Error SENR0001 in file:///C:/work/tests/build-TestXMLParser-Desktop-Debug/debug/TestXMLParser. exe、行 1、列 1: 属性 param は最上位に表示されるため、シリアル化できません。

=> 質問 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 に答える