• 3128阅读
  • 6回复

QT中XPath 语法怎么用,大佬们帮帮忙 [复制链接]

上一主题 下一主题
离线dafei2015
 

只看楼主 倒序阅读 楼主  发表于: 2019-06-17
关键词: QTCreatorXML
//@value  比如选取名为value的所有属性  在QT中怎么使用Xpath语法?哪位大佬写两句看看  网上例子好少
本帖提到的人: @hehui @dosmlp @fsu0413
离线toby520

只看该作者 1楼 发表于: 2019-06-17
  1. import QtQuick 2.0
  2.   import QtQuick.XmlListModel 2.0
  3.   XmlListModel {
  4.       id: xmlModel
  5.       source: "http://www.mysite.com/feed.xml"
  6.       query: "/rss/channel/item"
  7.       XmlRole { name: "title"; query: "title/string()" }
  8.       XmlRole { name: "pubDate"; query: "pubDate/string()" }
  9.   }


qml里面比较方便 qt里面 好像只有qxmlquery
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线toby520

只看该作者 2楼 发表于: 2019-06-17
看下楼的内容
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线toby520

只看该作者 3楼 发表于: 2019-06-17
  1. #include "xqueryratereader.h"
  2. #include <QtXmlPatterns/QXmlQuery>
  3. #include <QStringList>
  4. #include <QFileInfo>
  5. #include <QDebug>
  6. #include "currency.h"
  7. // Notes: my biggest issue with this design is that the different pieces of
  8. //        each rate are pulled out separately. I would prefer one query that
  9. //        pulled them out in sets.
  10. void readRatesUsingXQuery(const QFileInfo file) {
  11.     const QString queryUrl = QString("doc('%1')//rate/%2/string()").arg(file.absoluteFilePath());
  12.     typedef QPair<QStringList &, QString> QueryPair;
  13.     QList<QueryPair> queries;
  14.     QStringList from, to, conversion;
  15.     queries << QueryPair(from, "from") << QueryPair(to, "to") << QueryPair(conversion, "conversion");
  16.     QXmlQuery query;
  17.     foreach (QueryPair pair, queries) {
  18.         query.setQuery(queryUrl.arg(pair.second));
  19.         query.evaluateTo(&pair.first);
  20.     }
  21.     if (to.size() != from.size() || to.size() != conversion.size())
  22.         return;
  23.     for (int i = 0; i < to.size(); ++i)
  24.         Currency::addRate(from.at(i), to.at(i), conversion.at(i));
  25. }
  26. // Same as method above but without any pizzazz. Note that it's only one line shorter.
  27. void readRatesUsingXQuery_expanded(const QFileInfo file) {
  28.     const QString queryUrl = QString("doc('%1')//rate/%2/string()").arg(file.absoluteFilePath());
  29.     QStringList from, to, conversion;
  30.     QXmlQuery query;
  31.     query.setQuery(queryUrl.arg("from"));
  32.     query.evaluateTo(&from);
  33.     query.setQuery(queryUrl.arg("to"));
  34.     query.evaluateTo(&to);
  35.     query.setQuery(queryUrl.arg("conversion"));
  36.     query.evaluateTo(&conversion);
  37.     if (to.size() != from.size() || to.size() != conversion.size())
  38.         return;
  39.     for (int i = 0; i < to.size(); ++i)
  40.         Currency::addRate(from.at(i), to.at(i), conversion.at(i));
  41. }
  42. void readRatesUsingXQuery2(const QFileInfo file) {
  43.     const QString queryUrl = QString("doc('%1')//rate/string-join((from, to, conversion)/string(), ',')")
  44.                              .arg(file.absoluteFilePath());
  45.     QStringList rates;
  46.     QXmlQuery query;
  47.     query.setQuery(queryUrl);
  48.     query.evaluateTo(&rates);
  49.     foreach (const QString &rate, rates) {
  50.         QStringList values = rate.split(',');
  51.         if (values.size() != 3)
  52.             continue;
  53.         Currency::addRate(values[0], values[1], values[2]);
  54.     }
  55. }

  1. <rates>
  2.   <rate>
  3.     <from>AUD</from>
  4.     <to>CAD</to>
  5.     <conversion>1.0079</conversion>
  6.   </rate>
  7.   <rate>...</rate>
  8.   ...
  9. </rates>


QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线dafei2015

只看该作者 4楼 发表于: 2019-06-17
回 toby520 的帖子
toby520:#include "xqueryratereader.h"
#include <QtXmlPatterns/QXmlQuery>
#include <QStringList>
#include <QFileInfo>
....... (2019-06-17 18:05) 

谢谢 有用  我研究研究
离线fsu0413

只看该作者 5楼 发表于: 2019-06-17
艾特我了。。。不过我不懂,不好意思
瞥了一眼,楼上用了QtXmlPatterns,这玩意被Qt弃用了。。。。
离线hehui

只看该作者 6楼 发表于: 2019-07-28
不好意思,这个还真没用过
快速回复
限100 字节
 
上一个 下一个