timequery.cpp Example File
xmlpatterns/trafficinfo/timequery.cpp
 
 
 #include "timequery.h"
 #include <QtCore/QStringList>
 #include <QtXmlPatterns/QXmlQuery>
 TimeInformation::TimeInformation(const QString &time, const QString &direction)
     : m_time(time), m_direction(direction)
 {
 }
 QString TimeInformation::time() const
 {
     return m_time;
 }
 QString TimeInformation::direction() const
 {
     return m_direction;
 }
 TimeInformation::List TimeQuery::query(const QString &stationId, const QStringList &lineNumbers, const QDateTime &dateTime)
 {
     const TimeInformation::List information = queryInternal(stationId, dateTime);
     TimeInformation::List filteredInformation;
     if (!lineNumbers.isEmpty()) {
         for (int i = 0; i < information.count(); ++i) {
             const TimeInformation info = information.at(i);
             for (int j = 0; j < lineNumbers.count(); ++j) {
                 if (info.direction().startsWith(QString("%1 ").arg(lineNumbers.at(j))))
                     filteredInformation.append(info);
             }
         }
     } else {
         filteredInformation = information;
     }
     return filteredInformation;
 }
 TimeInformation::List TimeQuery::queryInternal(const QString &stationId, const QDateTime &dateTime)
 {
     const QString timesQueryUrl = QString("doc('http://wap.trafikanten.no/F.asp?f=%1&t=%2&m=%3&d=%4&start=1')/wml/card/p/small/a[fn:starts-with(@href, 'Rute')]/string()")
                                          .arg(stationId)
                                          .arg(dateTime.time().hour())
                                          .arg(dateTime.time().minute())
                                          .arg(dateTime.toString("dd.MM.yyyy"));
     const QString directionsQueryUrl = QString("doc('http://wap.trafikanten.no/F.asp?f=%1&t=%2&m=%3&d=%4&start=1')/wml/card/p/small/text()[matches(., '[0-9].*')]/string()")
                                               .arg(stationId)
                                               .arg(dateTime.time().hour())
                                               .arg(dateTime.time().minute())
                                               .arg(dateTime.toString("dd.MM.yyyy"));
     QStringList times;
     QStringList directions;
     QXmlQuery query;
     query.setQuery(timesQueryUrl);
     query.evaluateTo(×);
     query.setQuery(directionsQueryUrl);
     query.evaluateTo(&directions);
     if (times.count() != directions.count()) 
         return TimeInformation::List();
     TimeInformation::List information;
     for (int i = 0; i < times.count(); ++i)
         information.append(TimeInformation(times.at(i).simplified(), directions.at(i).simplified()));
     return information;
 }