// 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());
// 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)); }