QXmlQuery和Xpath:无法提取节点’;s文本或参数’;s值

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列:无法序列化属

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

  • 如果我试图提取
    text1
    (因此节点的文本,请参见第32行),代码将返回整个节点:
    text1
  • =>问题1:如何仅获取文本1

  • 如果我试图提取
    x1
    (参数值,见第35行),代码将返回错误: 中的错误SENR0001file:///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;;
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括
    #包括
    #包括
    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);