查看完整版本: [-- QT中XPath 语法怎么用,大佬们帮帮忙 --]

QTCN开发网 -> Qt基础编程 -> QT中XPath 语法怎么用,大佬们帮帮忙 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

dafei2015 2019-06-17 16:06

QT中XPath 语法怎么用,大佬们帮帮忙

//@value  比如选取名为value的所有属性  在QT中怎么使用Xpath语法?哪位大佬写两句看看  网上例子好少

toby520 2019-06-17 17:54
  1. import QtQuick 2.0
      import QtQuick.XmlListModel 2.0

      XmlListModel {
          id: xmlModel
          source: "http://www.mysite.com/feed.xml"
          query: "/rss/channel/item"

          XmlRole { name: "title"; query: "title/string()" }
          XmlRole { name: "pubDate"; query: "pubDate/string()" }
      }


qml里面比较方便 qt里面 好像只有qxmlquery

toby520 2019-06-17 18:04
看下楼的内容

toby520 2019-06-17 18:05
  1. #include "xqueryratereader.h"

    #include <QtXmlPatterns/QXmlQuery>
    #include <QStringList>
    #include <QFileInfo>
    #include <QDebug>

    #include "currency.h"

    // Notes: my biggest issue with this design is that the different pieces of
    //        each rate are pulled out separately. I would prefer one query that
    //        pulled them out in sets.
    void readRatesUsingXQuery(const QFileInfo file) {
        const QString queryUrl = QString("doc('%1')//rate/%2/string()").arg(file.absoluteFilePath());

        typedef QPair<QStringList &, QString> QueryPair;
        QList<QueryPair> queries;
        QStringList from, to, conversion;
        queries << QueryPair(from, "from") << QueryPair(to, "to") << QueryPair(conversion, "conversion");
        QXmlQuery query;
        foreach (QueryPair pair, queries) {
            query.setQuery(queryUrl.arg(pair.second));
            query.evaluateTo(&pair.first);
        }
        if (to.size() != from.size() || to.size() != conversion.size())
            return;
        for (int i = 0; i < to.size(); ++i)
            Currency::addRate(from.at(i), to.at(i), conversion.at(i));
    }

    // Same as method above but without any pizzazz. Note that it's only one line shorter.
    void readRatesUsingXQuery_expanded(const QFileInfo file) {
        const QString queryUrl = QString("doc('%1')//rate/%2/string()").arg(file.absoluteFilePath());

        QStringList from, to, conversion;
        QXmlQuery query;
        query.setQuery(queryUrl.arg("from"));
        query.evaluateTo(&from);
        query.setQuery(queryUrl.arg("to"));
        query.evaluateTo(&to);
        query.setQuery(queryUrl.arg("conversion"));
        query.evaluateTo(&conversion);
        if (to.size() != from.size() || to.size() != conversion.size())
            return;
        for (int i = 0; i < to.size(); ++i)
            Currency::addRate(from.at(i), to.at(i), conversion.at(i));
    }

    void readRatesUsingXQuery2(const QFileInfo file) {
        const QString queryUrl = QString("doc('%1')//rate/string-join((from, to, conversion)/string(), ',')")
                                 .arg(file.absoluteFilePath());

        QStringList rates;
        QXmlQuery query;
        query.setQuery(queryUrl);
        query.evaluateTo(&rates);
        foreach (const QString &rate, rates) {
            QStringList values = rate.split(',');
            if (values.size() != 3)
                continue;
            Currency::addRate(values[0], values[1], values[2]);
        }
    }

  1. <rates>
      <rate>
        <from>AUD</from>
        <to>CAD</to>
        <conversion>1.0079</conversion>
      </rate>
      <rate>...</rate>
      ...
    </rates>



dafei2015 2019-06-17 21:27
toby520:#include "xqueryratereader.h"
#include <QtXmlPatterns/QXmlQuery>
#include <QStringList>
#include <QFileInfo>
....... (2019-06-17 18:05) 

谢谢 有用  我研究研究

fsu0413 2019-06-17 21:54
艾特我了。。。不过我不懂,不好意思
瞥了一眼,楼上用了QtXmlPatterns,这玩意被Qt弃用了。。。。

hehui 2019-07-28 22:28
不好意思,这个还真没用过


查看完整版本: [-- QT中XPath 语法怎么用,大佬们帮帮忙 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled