#include <QApplication> #include <QFile> #include <QBuffer> #include <QIODevice> #include <QtXmlPatterns> #include <QXmlFormatter> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QFile sourceDocument; sourceDocument.setFileName("cookbook.xml"); sourceDocument.open(QIODevice::ReadOnly); QXmlQuery query; query.bindVariable("inputDocument", &sourceDocument); //之所以要将绑定 inputDocument 变量,估计是为了把需要查询的 xml 文件设置为可读模式,然后才能 setQuery 查询。 query.setQuery("(: Select all recipes. :)/ndeclare variable $inputDocument external; /ndoc($inputDocument)/cookbook/recipe/<p>{string(title)}</p>/n"); QByteArray outArray; QBuffer buffer(&outArray); buffer.open(QIODevice::ReadWrite); QXmlFormatter formatter(query, &buffer); query.evaluateTo(&formatter); if (query.evaluateTo(&formatter)) { buffer.close(); QLabel *label = new QLabel(QString::fromUtf8(outArray.constData())); label->show(); } sourceDocument.close(); return app.exec(); }