I am trying to extract text node values from this xml file:
<!DOCTYPE structure> <data> <x> <id>1</id> <nam>tytuł</nam> <tab>21</tab> <ind>5</ind> <pre>TY</pre> <khw>C.TY</khw> </x> <x> <id>2</id> <nam>autor</nam> <tab>21</tab> <ind>5</ind> <pre>FO</pre> <khw>C.FO</khw> </x> <x> <id>3</id> <nam>hasło korporatywne</nam> <tab>21</tab> <ind>5</ind> <pre>FN</pre> <khw>C.FN</khw> </x> </data>
What I want to do is get each node and its children and convert it to QMap. I have no problem retrieving a single element, but when it comes to getting children, setting the QXmlQuery result as focus, the QString that I evaluate for the node's child query is empty. I use this piece of code:
QXmlResultItems results; QFile structure("./structure.xml"); // xml file, as described earlier structure.open(QFile::ReadOnly); QXmlQuery query; query.setFocus(&structure); query.setQuery("data/x"); query.evaluateTo(&results); QXmlItem next = results.next(); while(!next.isNull()) { qDebug() << next.toNodeModelIndex().stringValue(); // everything fine. It prints contents of <x> child nodes QXmlQuery childQuery; QString r; childQuery.setFocus(next); childQuery.setQuery("./nam/text()"); // already tested: "/nam/text()", "/nam/string()", "x/nam/string()", "data/x/nam/string()" etc... still no luck. childQuery.evaluateTo(&r); qDebug() << r; // prints \n but it should print content of <nam> node. next = results.next(); }
The software I use is: Qt 4.7.2 SDK directly from the Qt website, QtCreator 2.3.1 on Windows and Linux (without any difference in this particular case, the results are the same). I want to be sure that the problem of lack of knowledge, not a software error, please help
source share