PDA

View Full Version : can QXmlQuery query on a QString which holds the whole XML document



zhongzhu
18th June 2009, 04:36
Looks like QXmlQuery only queries an XML file on disk. My situation is all my XML docs are saved in a QStringList, each QString is a XML doc. I don't want to save all the XML docs into files for QXmlQuery to do the query. Is there anyway for QXmlQuery to query on the XML doc in my QString?

AcerExtensa
22nd June 2009, 09:13
maybe QBuffer can help you...

Lykurg
22nd June 2009, 11:44
... with QXmlQuery::bindVariable ( const QXmlName & name, QIODevice * device )

brcain
2nd October 2009, 00:19
Is this the correct way of doing this?


QFile file("./books.xml");
QDomDocument doc;
doc.setContent(&file, true);

QByteArray xmlDoc = doc.toByteArray();
QBuffer xmlBuffer(&xmlDoc);
xmlBuffer.open(QIODevice::ReadOnly);
QXmlQuery query;
query.bindVariable("xmlDoc", &xmlBuffer);
query.setQuery("doc($xmlDoc)/bookstore/book[price>30]/title");

QString testOutput;
query.evaluateTo(&testOutput);
cout << testOutput.toStdString() << endl;

Given the contents of books.xml (shown at bottom of this post), I get the following results (which appear correct).

<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>

books.xml contents:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>

<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>

<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>

</bookstore>