//! [0] StationInformation::List StationQuery::query(const QString &name) { const QString stationIdQueryUrl = QString("doc(concat('http://wap.trafikanten.no/FromLink1.asp?fra=', $station))/wml/card/p/small/a[@title='Velg']/substring(@href,18)"); const QString stationNameQueryUrl = QString("doc(concat('http://wap.trafikanten.no/FromLink1.asp?fra=', $station))/wml/card/p/small/a[@title='Velg']/string()"); QStringList stationIds; QStringList stationNames; QXmlQuery query; query.bindVariable("station", QVariant(QString::fromLatin1(QUrl::toPercentEncoding(name)))); query.setQuery(stationIdQueryUrl); query.evaluateTo(&stationIds); query.bindVariable("station", QVariant(QString::fromLatin1(QUrl::toPercentEncoding(name)))); query.setQuery(stationNameQueryUrl); query.evaluateTo(&stationNames); if (stationIds.count() != stationNames.count()) // something went wrong... return StationInformation::List(); StationInformation::List information; for (int i = 0; i < stationIds.count(); ++i) information.append(StationInformation(stationIds.at(i), stationNames.at(i))); return information; }
std::string parserxml::getAnyValue(std::string pNodeDirectionValue) { if( !_file.open(QIODevice::ReadOnly)) { qDebug() << "No se pudo abrir el XML para lectura."; } else { QXmlQuery query; query.bindVariable("document", &_file); std::string stringdocument = "doc($document)"; std::string finalstring = std::string(stringdocument) + std::string(pNodeDirectionValue); query.setQuery(QString::fromStdString(finalstring)); if(!query.isValid()) { qDebug()<< "Xpath invalido."; } QString queryresult; query.evaluateTo(&queryresult); if (queryresult == "\n") { queryresult = ""; } _file.close(); return queryresult.toStdString(); } }
void ShoutcastFetcher::newStationsAvailable(QIODevice * openInputDevice, const QString & keyWord) { // Using read() putting the content into a QBuffer to workaround // some strange hang if passing IO device directly into // QXmlQuery object. QByteArray content = openInputDevice->read(maxSize); QBuffer buf(&content); buf.open(QIODevice::ReadOnly); QXmlQuery q; q.bindVariable("stations", &buf); q.setQuery("for $i in doc($stations)/stationlist/station " \ "let $tunein := doc($stations)/stationlist/tunein/@base " \ "return (string($i/@name), string($i/@id), string($i/@br), string($i/@genre)," \ " string($i/@lc), string($i/@mt), string($i/@ct), string($tunein))"); QStringList strings; q.evaluateTo(&strings); m_keywordStationMapping[keyWord].clear(); ShoutcastStationList & sl = m_keywordStationMapping[keyWord]; for (QStringList::const_iterator iter = strings.constBegin(); iter != strings.constEnd(); iter += 8) { QString tuneIn = stationsURL + *(iter + 1); ShoutcastStation s(*iter, (*(iter + 1)).toInt(), (*(iter + 2)).toInt(), *(iter + 3), (*(iter + 4)).toInt(), *(iter + 5), *(iter + 6), tuneIn); sl.append(s); } emit newStationsAvailable(keyWord); }
void AVRStudioXMLParser::Parse(QString configDirPath, Part *pPart) { QXmlQuery query; QString result; query.bindVariable("partName", QVariant(configDirPath)); query.setQuery(GetXQuery()); query.evaluateTo(&result); // for future use QString errorMsg; int line; int col; QDomDocument doc; if(!doc.setContent(result, &errorMsg, &line, &col)) return; QDomNode root = doc.firstChild(); QDomNode fuses = root.firstChild(); QDomNode locks = fuses.nextSibling(); QDomNode interfaces = locks.nextSibling(); pPart->SetFuseBits(GetBits(fuses.firstChild())); pPart->SetLockBits(GetBits(locks.firstChild())); pPart->SetProgrammingInterfaces(GetInterfaces(interfaces.firstChild())); }
void QueryMainWindow::evaluate(const QString &str) { /* This function takes the input string and displays the * appropriate output using QXmlQuery. */ QXmlQuery query; QFile sourceDocument; sourceDocument.setFileName(":/files/cookbook.xml"); sourceDocument.open(QIODevice::ReadOnly); query.bindVariable("inputDocument", &sourceDocument); query.setQuery(str); if(!query.isValid()) return; QByteArray outArray; QBuffer buffer(&outArray); buffer.open(QIODevice::ReadWrite); QXmlFormatter formatter(query, &buffer); if(!query.evaluateTo(&formatter)) return; buffer.close(); qFindChild<QTextEdit*>(this, "outputTextEdit")->setPlainText(QString::fromUtf8(outArray.constData())); }
void NetFlixQueueProxy::getQueueRequestCompleted(int retCode, QString body){ qDebug() << "queue request completed!!"; qDebug() << retCode; QXmlQuery query; QString result; QBuffer device; device.setData(body.toUtf8()); device.open(QIODevice::ReadOnly); query.bindVariable("netflix_queue",&device); query.setQuery(QUrl("qrc:/queries/queue.xq")); if (query.isValid()) { if (query.evaluateTo(&result)) qDebug() << result; else qDebug() << "Evaluate failed"; } else qDebug() << "setQuery Failed."; }
QString Server::commandForPlayer(QString aPlayerName) { mCommands->reset(); QXmlQuery* xmlQuery = new QXmlQuery; xmlQuery->bindVariable(KXmlFileName,mCommands); xmlQuery->bindVariable(KPlayer,QVariant(aPlayerName)); xmlQuery->setQuery(KXqReadCommandForPlayer); QString result = QString(); if(xmlQuery->isValid()) { xmlQuery->evaluateTo(&result); } delete xmlQuery; return result; }
void RssFeedNode::render(Grantlee::OutputStream* stream, Grantlee::Context* c) { QNetworkAccessManager *mgr = new QNetworkAccessManager(this); QUrl url(Grantlee::getSafeString(m_url.resolve(c))); QNetworkReply *reply = mgr->get(QNetworkRequest(url)); QEventLoop eLoop; connect( mgr, SIGNAL( finished( QNetworkReply * ) ), &eLoop, SLOT( quit() ) ); eLoop.exec( QEventLoop::ExcludeUserInputEvents ); c->push(); foreach(Grantlee::Node *n, m_childNodes) { if (!n->inherits(XmlNamespaceNode::staticMetaObject.className())) continue; Grantlee::OutputStream _dummy; n->render(&_dummy, c); } QXmlQuery query; QByteArray ba = reply->readAll(); QBuffer buffer; buffer.setData(ba); buffer.open(QIODevice::ReadOnly); query.bindVariable("inputDocument", &buffer); QString ns; QHash<QString, QVariant> h = c->lookup("_ns").toHash(); QHash<QString, QVariant>::const_iterator it = h.constBegin(); const QHash<QString, QVariant>::const_iterator end = h.constEnd(); for ( ; it != end; ++it ) { if (it.key().isEmpty()) { ns += QLatin1Literal( "declare default element namespace " ) + QLatin1Literal( " \"" ) + it.value().toString() + QLatin1Literal( "\";\n" ); } else { ns += QLatin1Literal( "declare namespace " ) + it.key() + QLatin1Literal( " = \"" ) + it.value().toString() + QLatin1Literal( "\";\n" ); } } query.setQuery(ns + "doc($inputDocument)" + Grantlee::getSafeString(m_query.resolve(c)).get()); QXmlResultItems result; query.evaluateTo(&result); QXmlItem item(result.next()); int count = 0; while (!item.isNull()) { if (count++ > 20) break; query.setFocus(item); c->push(); foreach(Grantlee::Node *n, m_childNodes) { if (n->inherits(XmlNamespaceNode::staticMetaObject.className())) continue; c->insert("_q", QVariant::fromValue(query)); n->render(stream, c); } c->pop(); item = result.next(); } c->pop(); }
void FeedEntryListModel::initFeedEntryList() { QFile queryFile(":/cxReader/xquery/feedEntryList.xq"); queryFile.open(QIODevice::ReadOnly); QXmlQuery query; query.setNetworkAccessManager(this->config->manager()); query.bindVariable("file", QVariant(this->config->baseUrl() + "/feeds/"+this->id)); query.setQuery(&queryFile); this->namePool = query.namePool(); query.evaluateTo(this); queryFile.close(); }
QStringList ExternalPlaylist::executeXmlQuery(const QString& libraryPath, const QString& xPath, const QStringList& parameters){ QStringList results; QFile xmlFile(libraryPath); if (!xmlFile.open(QIODevice::ReadOnly)) return results; QXmlQuery xmlQuery; xmlQuery.bindVariable("inputDocument", &xmlFile); // bind any other parameters for(int i=0; i<(signed)parameters.size(); i += 2){ if(i + 1 >= (signed)parameters.size()) break; xmlQuery.bindVariable(parameters[i], QVariant(parameters[i+1])); } xmlQuery.setQuery(xPath); xmlQuery.evaluateTo(&results); xmlFile.close(); return results; }
void ShoutcastFetcher::genresAvailable(QIODevice * openInputDevice) { // Using read() putting the content into a QBuffer to workaround // some strange hang if passing IO device directly into // QXmlQuery object. m_genres.clear(); QByteArray content = openInputDevice->read(maxSize); QBuffer buf(&content); buf.open(QIODevice::ReadOnly); QXmlQuery q; q.bindVariable("glist", &buf); q.setQuery("for $i in doc($glist)/genrelist/genre/@name return string($i)"); m_success = q.evaluateTo(&m_genres); emit genresAvailable(); }
// Program entry point int main(int argc, char **argv) { // Validate arguments if (argc < 3) { qFatal("Usage: %s <html-file> <xquery-file>\nUse - to read from stdin", argv[0]); } if (!strcmp(argv[1], "-") && !strcmp(argv[2], "-")) { qFatal("Err, cannot read both HTML and XQuery file from stdin"); } // We'll need a QCoreApplication instance for this QCoreApplication app(argc, argv); // Setup query first, so we can use its name pool QXmlQuery query; // Read HTML data QFile htmlFile; if (!openFile(&htmlFile, argv[1])) { qFatal("Err, can't open HTML file %s", argv[1]); } QByteArray source = htmlFile.readAll(); QHtmlNodeModel model(query.namePool(), source, QUrl::fromLocalFile(argv[1])); // Bind the "dom" variable to the root element of the document query.bindVariable("dom", model.dom()); // Setup the query QFile queryFile; if (!openFile(&queryFile, argv[2])) { qFatal("Err, can't open XQuery file %s", argv[2]); } query.setQuery(&queryFile, QUrl::fromLocalFile(argv[2])); // Setup a formatter printing to stdout QFile out; out.open(stdout, QIODevice::WriteOnly); QXmlFormatter formatter(query, &out); // Evaluate and exit if (!query.evaluateTo(&formatter)) { return 1; } return 0; }
void ErrorHandler::handleMessage(QtMsgType type, const QString &description, const QUrl &identifier, const QSourceLocation &) { /* Don't use pDebug() in this function, it results in infinite * recursion. Talking from experience.. */ Message msg; msg.setType(type); msg.setIdentifier(identifier); /* Let's remove all the XHTML markup. */ QBuffer buffer; buffer.setData(description.toLatin1()); buffer.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable(QLatin1String("desc"), &buffer); query.setQuery(QLatin1String("string(doc($desc))")); QStringList result; const bool success = query.evaluateTo(&result); if(!description.startsWith(QLatin1String("\"Test-suite harness error:"))) { const QString msg(QString::fromLatin1("Invalid description: %1").arg(description)); QVERIFY2(success, qPrintable(msg)); if(!success) QTextStream(stderr) << msg; } if(!result.isEmpty()) msg.setDescription(result.first()); m_messages.append(msg); }
void Parser131500ComAu::parseStationsByName(QNetworkReply *networkReply) { StationsResultList result; QRegExp regexp = QRegExp("<select name=\"(.*)\" id=\"from\" size=\"6\" class=\"multiple\">(.*)</select>"); regexp.setMinimal(true); regexp.indexIn(networkReply->readAll()); QString element = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><html xmlns=\"http://www.w3.org/1999/xhtml\">\n<body>\n" + regexp.cap(0) + "\n</body>\n</html>\n"; QBuffer readBuffer; readBuffer.setData(element.toAscii()); readBuffer.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable("path", &readBuffer); //Query for more than one result query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/select/option/string()"); QStringList stationNames; if (!query.evaluateTo(&stationNames)) { qDebug() << "parser131500ComAu::getStationsByName - Query 1 Failed"; } for (int i = 0; i < stationNames.count(); i++) { //Remove unneeded stuff from the result stationNames[i].replace(" (Location)", ""); StationsResultItem *item = new StationsResultItem(); item->setStationName(stationNames[i].trimmed()); result.appendItem(item); } emit stationsResult(&result); }
void ParserHafasXml::parseSearchJourney(QNetworkReply *networkReply) { lastJourneyResultList = new JourneyResultList(); journeyDetailInlineData.clear(); QBuffer readBuffer; readBuffer.setData(networkReply->readAll()); readBuffer.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable("path", &readBuffer); query.setQuery("doc($path)/ResC/Err//@text/string()"); QStringList errorResult; if (!query.evaluateTo(&errorResult)) { qDebug() << "parserHafasXml::ErrorTest - Query Failed"; } if (errorResult.count() > 0 ) { emit errorOccured(errorResult.join("").trimmed()); qWarning()<<"ParserHafasXml::parseSearchJourneyPart2:"<<errorResult.join(""); return; } //Query for station infos query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection/@id/string()"); QStringList resultIds; if (!query.evaluateTo(&resultIds)) { qDebug() << "parserHafasXml::getJourneyData 2 - Query Failed"; } if (resultIds.count() <= 0) { emit journeyResult(lastJourneyResultList); return; } for(int i = 0;i<resultIds.count(); i++) { //qDebug()<<"Connection:"<<resultIds[i]; query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Date/string()"); QStringList dateResult; if (!query.evaluateTo(&dateResult)) { qDebug() << "parserHafasXml::getJourneyData 3 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Transfers/string()"); QStringList transfersResult; if (!query.evaluateTo(&transfersResult)) { qDebug() << "parserHafasXml::getJourneyData 4 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Duration/Time/string()"); QStringList durationResult; if (!query.evaluateTo(&durationResult)) { qDebug() << "parserHafasXml::getJourneyData 5 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Products/Product/@cat/string()"); QStringList trainsResult; if (!query.evaluateTo(&trainsResult)) { qDebug() << "parserHafasXml::getJourneyData 6 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Departure/BasicStop/Station/@name/string()"); QStringList depResult; if (!query.evaluateTo(&depResult)) { qDebug() << "parserHafasXml::getJourneyData 7 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Arrival/BasicStop/Station/@name/string()"); QStringList arrResult; if (!query.evaluateTo(&arrResult)) { qDebug() << "parserHafasXml::getJourneyData 8 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Departure/BasicStop/Dep/Time/string()"); QStringList depTimeResult; if (!query.evaluateTo(&depTimeResult)) { qDebug() << "parserHafasXml::getJourneyData 9 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Departure/BasicStop/Dep/Platform/Text/string()"); QStringList depPlatResult; if (!query.evaluateTo(&depPlatResult)) { qDebug() << "parserHafasXml::getJourneyData 10 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Arrival/BasicStop/Arr/Time/string()"); QStringList arrTimeResult; if (!query.evaluateTo(&arrTimeResult)) { qDebug() << "parserHafasXml::getJourneyData 11 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/Arrival/BasicStop/Arr/Platform/Text/string()"); QStringList arrPlatResult; if (!query.evaluateTo(&arrPlatResult)) { qDebug() << "parserHafasXml::getJourneyData 12 - Query Failed"; } query.setQuery("doc($path)/ResC/ConRes/ConnectionList/Connection[@id='" + resultIds[i] + "']/Overview/XMLHandle/@url/string()"); QStringList xmlHandleResult; if (!query.evaluateTo(&xmlHandleResult)) { qDebug() << "parserHafasXml::getJourneyData 13 - Query Failed"; } QDate date = QDate::fromString(dateResult.join("").trimmed(), "yyyyMMdd"); for (int j = 0; j < trainsResult.count(); j++) { trainsResult[j] = trainsResult[j].trimmed(); } JourneyResultItem *item = new JourneyResultItem(); item->setDate(date); item->setId(resultIds[i]); item->setTransfers(transfersResult.join("").trimmed()); item->setDuration(cleanHafasDate(durationResult.join("").trimmed())); item->setMiscInfo(""); item->setTrainType(trainsResult.join(", ").trimmed()); item->setDepartureTime(cleanHafasDate(depTimeResult.join("").trimmed())); item->setArrivalTime(cleanHafasDate(arrTimeResult.join("").trimmed())); bool hasInline = false; QString internalData1 = xmlHandleResult.join("").trimmed(); if (internalData1.count() > 0 && internalData1.indexOf("extxml.exe")) { hasInline = true; } if (internalData1.count() > 0) { internalData1.remove(0, internalData1.indexOf("query.exe") + 9); internalData1.prepend(baseUrl); item->setInternalData1(internalData1); } else { hasInline = true; } if (hasInline){ journeyDetailRequestData.id = item->id(); journeyDetailRequestData.date = item->date(); journeyDetailRequestData.duration = item->duration(); QByteArray data = readBuffer.buffer(); JourneyDetailResultList *results = internalParseJourneyDetails(data); journeyDetailInlineData.append(results); } lastJourneyResultList->setDepartureStation(depResult.join("").trimmed()); lastJourneyResultList->setArrivalStation(arrResult.join("").trimmed()); lastJourneyResultList->setTimeInfo(date.toString()); lastJourneyResultList->appendItem(item); } //Query for next and prev stuff query.setQuery("doc($path)/ResC/ConRes/ConResCtxt/string()"); QStringList ConResCtxtResult; if (!query.evaluateTo(&ConResCtxtResult)) { qDebug() << "parserHafasXml::getJourneyData 14 - Query Failed"; } hafasContext.seqNr = ConResCtxtResult.join(""); emit journeyResult(lastJourneyResultList); }
void Parser131500ComAu::parseSearchJourney(QNetworkReply *networkReply) { lastJourneyResultList = new JourneyResultList(); QBuffer *filebuffer = new QBuffer(); filebuffer->setData(networkReply->readAll()); QRegExp regexp = QRegExp("<div class=\"midcolumn3\">(.*)</div>(.*)</div>(.*)<div id=\"righttools\">"); regexp.setMinimal(true); regexp.indexIn(filebuffer->buffer()); QString element = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><html xmlns=\"http://www.w3.org/1999/xhtml\">\n<body>\n" + regexp.cap(0) + "\n</div></body>\n</html>\n"; QRegExp imgReg = QRegExp("icon_(.*)_s.gif\" />"); imgReg.setMinimal(true); element.replace(imgReg, "icon_" + QString("\\1") + "_s.gif\" />" + QString("\\1")); element.replace("am+", "am"); element.replace("pm+", "pm"); //qDebug()<<element; QBuffer readBuffer; readBuffer.setData(element.toAscii()); readBuffer.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable("path", &readBuffer); query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/div/div/table/tbody/tr/td[@id='header2']/string()"); QStringList departResult; if (!query.evaluateTo(&departResult)) { qDebug() << "parser131500ComAu::getJourneyData - Query 1 Failed"; } query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/div/div/table/tbody/tr/td[@id='header3']/string()"); QStringList arriveResult; if (!query.evaluateTo(&arriveResult)) { qDebug() << "parser131500ComAu::getJourneyData - Query 2 Failed"; } query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/div/div/table/tbody/tr/td[@id='header4']/string()"); QStringList timeResult; if (!query.evaluateTo(&timeResult)) { qDebug() << "parser131500ComAu::getJourneyData - Query 3 Failed"; } query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/div/div/table/tbody/tr/td[@id='header5']/string()"); QStringList trainResult; if (!query.evaluateTo(&trainResult)) { qDebug() << "parser131500ComAu::getJourneyData - Query 4 Failed"; } query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/div/div/div/string()"); QStringList headerResult; if (!query.evaluateTo(&headerResult)) { qDebug() << "parser131500ComAu::getJourneyData - Query 5 Failed"; } for (int i = 0; i < headerResult.count(); i++) { QRegExp regexp = QRegExp("(From:|To:|When:)(.*)$"); regexp.setMinimal(true); regexp.indexIn(headerResult[i].trimmed()); if (regexp.cap(1) == "From:") { lastJourneyResultList->setDepartureStation(regexp.cap(2).trimmed()); } if (regexp.cap(1) == "To:") { lastJourneyResultList->setArrivalStation(regexp.cap(2).trimmed()); } if (regexp.cap(1) == "When:") { lastJourneyResultList->setTimeInfo(regexp.cap(2).trimmed()); } } QRegExp regexp2 = QRegExp("(.*), (\\d\\d) (.*) (\\d\\d\\d\\d)"); regexp2.setMinimal(true); regexp2.indexIn(lastJourneyResultList->timeInfo().trimmed()); QLocale enLocale = QLocale(QLocale::English, QLocale::UnitedStates); int month = 1; for (month = 1; month < 10; month++) { if (regexp2.cap(3).trimmed() == enLocale.standaloneMonthName(month)) { break; } } QDate journeydate = QDate::fromString(regexp2.cap(2).trimmed() + " " + QString::number(month) + " " + regexp2.cap(4).trimmed(), "dd M yyyy"); //Generate Details search results QStringList detailsResult; regexp = QRegExp("<table class=\"dataTbl widthcol2and3\" cellspacing=\"0\" style=\"margin:0px ! important;border-right:0px none;\" summary=\"Search Results Details\">(.*)</table>"); regexp.setMinimal(true); int pos = 0; while ((pos = regexp.indexIn(filebuffer->buffer(), pos)) != -1) { QString element = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><html xmlns=\"http://www.w3.org/1999/xhtml\">\n<body><table>\n" + regexp.cap(1) + "\n</table></body>\n</html>\n"; element.replace(" ", " "); element.replace("bulletin.gif\">", "bulletin.gif\" />"); QBuffer readBuffer; readBuffer.setData(element.toAscii()); readBuffer.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable("path", &readBuffer); query.setQuery("declare default element namespace \"http://www.w3.org/1999/xhtml\"; declare variable $path external; doc($path)/html/body/table/tbody/tr/td[@headers='header2']/string()"); QStringList detailsContentResult; if (!query.evaluateTo(&detailsContentResult)) { qDebug() << "parser131500ComAu::getJourneyData - DetailsQuery 1 Failed"; } detailsResult << detailsContentResult.join("<linesep>"); pos += regexp.matchedLength(); } //qDebug()<<departResult; //Create search result for (int i = 0; i < departResult.count(); i++) { //Parse transporttypes and changes QString tmp = trainResult[i].trimmed(); tmp.replace("\t", " "); tmp.replace("\n", " "); tmp.replace("\r", " "); QStringList trains = tmp.split(" ", QString::SkipEmptyParts); int changes = trains.length() - 1; trains.removeDuplicates(); //Parse travel time tmp = timeResult[i].trimmed(); tmp.replace("mins", ""); tmp.replace("min", ""); tmp.replace("hrs ", ":"); tmp.replace("hr ", ":"); QStringList durationLst = tmp.split(":", QString::SkipEmptyParts); QString durationStr = ""; if (durationLst.length() == 1) { durationStr.sprintf("00: %02d", durationLst[0].toInt()); } if (durationLst.length() == 2) { durationStr.sprintf("%02d:%02d", durationLst[0].toInt(), durationLst[1].toInt()); } JourneyResultItem *item = new JourneyResultItem(); item->setDate(journeydate); item->setId(QString::number(i)); item->setTransfers(QString::number(changes)); item->setDuration(durationStr); item->setTrainType(trains.join(", ")); item->setDepartureTime(QTime::fromString(departResult[i].trimmed(), "h:map").toString("hh:mm")); item->setArrivalTime(QTime::fromString(arriveResult[i].trimmed(), "h:map").toString("hh:mm")); item->setInternalData1(detailsResult[i]); lastJourneyResultList->appendItem(item); } emit journeyResult(lastJourneyResultList); }
JourneyDetailResultList* ParserHafasXml::internalParseJourneyDetails(QByteArray data) { qDebug() << ";;;;;;;;;;;;;;;" << data; JourneyDetailResultList *results = new JourneyDetailResultList(); QBuffer readBuffer; readBuffer.setData(data); readBuffer.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable("path", &readBuffer); query.setQuery("doc($path)/ResC/Err//@text/string()"); QStringList errorResult; if (!query.evaluateTo(&errorResult)) { qDebug() << "parserHafasXml::ErrorTest - Query Failed"; return results; } if (errorResult.count() > 0 ) { emit errorOccured(errorResult.join("").trimmed()); qWarning()<<"ParserHafasXml::internalParseJourneyDetails:"<<errorResult.join(""); return results; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Departure/BasicStop/Station/@name/string()"); QStringList departureResults; if (!query.evaluateTo(&departureResults)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 1 Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Arrival/BasicStop/Station/@name/string()"); QStringList arrivalResults; if (!query.evaluateTo(&arrivalResults)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 2 Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Departure/BasicStop/Location/Station/HafasName/Text/string()"); QStringList departure2Results; if (!query.evaluateTo(&departure2Results)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 1b Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Arrival/BasicStop/Location/Station/HafasName/Text/string()"); QStringList arrival2Results; if (!query.evaluateTo(&arrival2Results)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 2b Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Departure/BasicStop/Dep/Time/string()"); QStringList depTimeResult; if (!query.evaluateTo(&depTimeResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 3 Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Departure/BasicStop/Dep/Platform/Text/string()"); QStringList depPlatResult; if (!query.evaluateTo(&depPlatResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 4 Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Arrival/BasicStop/Arr/Time/string()"); QStringList arrTimeResult; if (!query.evaluateTo(&arrTimeResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 5 Failed"; } query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection/Arrival/BasicStop/Arr/Platform/Text/string()"); QStringList arrPlatResult; if (!query.evaluateTo(&arrPlatResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 6 Failed"; } //It is possible, that the stationname is in two seperate fields if (departureResults.count() == 0 && departure2Results.count() > 0) { departureResults = departure2Results; arrivalResults = arrival2Results; } if (departureResults.count() == arrivalResults.count()) { for(int i = 0; i < departureResults.count(); i++) { JourneyDetailResultItem *item = new JourneyDetailResultItem(); /* qDebug()<<" "<<"Journey "<<i; qDebug()<<" DepartureSt:"<<departureResults[i].trimmed(); qDebug()<<" DepartureTime:"<<depTimeResult[i].trimmed(); qDebug()<<" DeparturePlatform:"<<depPlatResult[i].trimmed(); qDebug()<<" ArrivalSt:"<<arrivalResults[i].trimmed(); qDebug()<<" ArrivalTime:"<<arrTimeResult[i].trimmed(); qDebug()<<" ArrivalPlatform:"<<arrPlatResult[i].trimmed(); */ item->setDepartureDateTime(cleanHafasDateTime(depTimeResult[i].trimmed(), journeyDetailRequestData.date)); item->setArrivalDateTime(cleanHafasDateTime(arrTimeResult[i].trimmed(), journeyDetailRequestData.date)); item->setDepartureStation(departureResults[i].trimmed()); item->setArrivalStation(arrivalResults[i].trimmed()); if (depPlatResult[i].trimmed() != "") { item->setDepartureInfo(tr("Pl.") + " " + depPlatResult[i].trimmed()); } if (arrPlatResult[i].trimmed() != "") { item->setArrivalInfo(tr("Pl.") + " " + arrPlatResult[i].trimmed()); } //Check for train or if walking query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection[" + QString::number(i + 1) + "]/Journey/JourneyAttributeList/JourneyAttribute/Attribute[@type='NAME']/AttributeVariant/Text/string()"); QStringList trainResult; if (!query.evaluateTo(&trainResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 7 Failed"; } if (trainResult.count() > 0) { //qDebug()<<" Train:"<<trainResult.join("").trimmed(); item->setTrain(trainResult.join("").trimmed()); } else { query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection[" + QString::number(i + 1) + "]/Walk/Duration/Time/string()"); QStringList walkResult; if (!query.evaluateTo(&walkResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 8 Failed"; } //Maybe its a transfer? QStringList transferResult; if (walkResult.count() == 0) { query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection[" + QString::number(i + 1) + "]/Transfer/Duration/Time/string()"); if (!query.evaluateTo(&transferResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 8b Failed"; } } //Maybe its gisroute? if (walkResult.count() == 0 && transferResult.count() == 0) { query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection[" + QString::number(i + 1) + "]/GisRoute/Duration/Time/string()"); QStringList gisrouteResult; if (!query.evaluateTo(&gisrouteResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 9 Failed"; } //Ok its a gisroute if (gisrouteResult.count() > 0) { query.setQuery("doc($path)/ResC/ConRes//Connection[@id='" + journeyDetailRequestData.id + "']/ConSectionList/ConSection[" + QString::number(i + 1) + "]/GisRoute/@type/string()"); QStringList gisroutetypeResult; if (!query.evaluateTo(&gisroutetypeResult)) { qDebug() << "parserHafasXml::parseJourneyDataDetails - Query 10 Failed"; } QString gisrouteType = gisroutetypeResult.join("").trimmed(); int minutes = cleanHafasDate(gisrouteResult.join("").trimmed()).toInt(); if (gisrouteType == "FOOT") { item->setInfo(tr("Walk for %n min", "", minutes)); } else if (gisrouteType == "BIKE") { item->setInfo(tr("Use a Bike for %n min", "", minutes)); } else if (gisrouteType == "CAR") { item->setInfo(tr("Use a car for %n min", "", minutes)); } else if (gisrouteType == "TAXI") { item->setInfo(tr("Take a taxi for %n min", "", minutes)); } } } else { if (transferResult.count() > 0) { item->setInfo(tr("Transfer for %n min", "", cleanHafasDate(transferResult.join("").trimmed()).toInt())); } if (walkResult.count() > 0) { item->setInfo(tr("Walk for %n min", "", cleanHafasDate(walkResult.join("").trimmed()).toInt())); } } } results->appendItem(item); } if (results->itemcount() > 0) { results->setDepartureStation(results->getItem(0)->departureStation()); results->setArrivalStation(results->getItem(results->itemcount() - 1)->arrivalStation()); for (int i=0; i < results->itemcount(); i++) { if (!results->getItem(i)->departureDateTime().isNull()) { results->setDepartureDateTime(results->getItem(i)->departureDateTime()); break; } } for (int i=results->itemcount() -1; i >= 0; i--) { if (!results->getItem(i)->arrivalDateTime().isNull()) { results->setArrivalDateTime(results->getItem(i)->arrivalDateTime()); break; } } results->setDuration(journeyDetailRequestData.duration); results->setId(journeyDetailRequestData.id); } return results; } emit errorOccured(tr("Internal error occured, Error parsing details data")); return results; }
int main(int argc, char **argv) { enum ExitCode { /** * We start from 2, because QApplicationArgumentParser * uses 1. */ QueryFailure = 2, StdOutFailure }; const QCoreApplication app(argc, argv); QCoreApplication::setApplicationName(QLatin1String("xmlpatterns")); PatternistApplicationParser parser(argc, argv); parser.setApplicationDescription(QLatin1String("A tool for running XQuery queries.")); parser.setApplicationVersion(QLatin1String("0.1")); /* Is there a better way to do this? Probably not, but if the class becomes public, we probably * want a helper function that wraps this hack. */ const int parameterType = qVariantFromValue(Parameter()).userType(); const int outputType = qVariantFromValue(static_cast<QIODevice *>(0)).userType(); QApplicationArgument param(QLatin1String("param"), QXmlPatternistCLI::tr("Binds an external variable. The value is directly available using the variable reference: $name."), parameterType); param.setMaximumOccurrence(-1); parser.addArgument(param); const QApplicationArgument noformat(QLatin1String("no-format"), QXmlPatternistCLI::tr("By default output is formatted for readability. When specified, strict serialization is performed.")); parser.addArgument(noformat); const QApplicationArgument isURI(QLatin1String("is-uri"), QXmlPatternistCLI::tr("If specified, the filename is interpreted as a URI instead of a local filename.")); parser.addArgument(isURI); /* The temporary object is required to compile with g++ 3.3. */ QApplicationArgument queryURI = QApplicationArgument(QString(), /* Nameless. */ QXmlPatternistCLI::tr("A local filename pointing to the query to run. " "If the name ends with .xq it's assumed " "to be an XQuery query. (In other cases too, but " "that interpretation may change in a future release of Qt.)"), QVariant::String); queryURI.setMinimumOccurrence(1); parser.addArgument(queryURI); QApplicationArgument output(QLatin1String("output"), QXmlPatternistCLI::tr("A local file to which the output should be written. The file is overwritten, or if not exist, created. If absent, stdout is used."), outputType); parser.addArgument(output); if(!parser.parse()) return parser.exitCode(); QXmlQuery query; /* Bind external variables. */ { const QVariantList parameters(parser.values(param)); const int len = parameters.count(); for(int i = 0; i < len; ++i) { const Parameter p(qVariantValue<Parameter>(parameters.at(i))); query.bindVariable(p.first, QXmlItem(p.second)); } } /* The final preparations and execute the query. */ QPatternist::ColoringMessageHandler messageHandler; query.setMessageHandler(&messageHandler); /* Get the query URI. */ QUrl userURI; { const QString stringURI(parser.value(queryURI).toString()); if(parser.has(isURI)) userURI = QUrl::fromEncoded(stringURI.toLatin1()); else userURI = QUrl::fromLocalFile(stringURI); } const QUrl effectiveURI(QUrl::fromLocalFile(QDir::current().absolutePath() + QLatin1Char('/')).resolved(userURI)); Q_ASSERT_X(userURI.isValid(), Q_FUNC_INFO, "QApplicationArgumentParser should promise us this."); query.setQuery(effectiveURI); QIODevice *const outDevice = qVariantValue<QIODevice *>(parser.value(output)); Q_ASSERT(outDevice); Q_ASSERT(outDevice->isWritable()); if(query.isValid()) { QAbstractXmlReceiver *receiver = 0; if(parser.has(noformat)) receiver = new QXmlSerializer(query, outDevice); else receiver = new QXmlFormatter(query, outDevice); const bool success = query.evaluateTo(receiver); delete outDevice; delete receiver; if(success) return parser.exitCode(); else return QueryFailure; } else { delete outDevice; return QueryFailure; } }