XQuery: in Datenstruktur importieren

Alles rund um die Programmierung mit Qt
Antworten
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

XQuery: in Datenstruktur importieren

Beitrag von phlox81 »

Hallo,

ich habe ein XML Dokument was ich mittels XQuery auswerten möchte.

Dabei möchte ich einzelne Datensätze auslesen und diese in einer struktur ablegen.

Code: Alles auswählen

struct person
{
  QString name,vorname;
};
// oder auch
boost::tuple<QString,QString> person;
In den Examples für XQuerys habe ich dies schon gefunden:
http://doc.qtsoftware.com/4.5/xmlpatter ... cinfo.html

Code: Alles auswählen

QStringList times;
     QStringList directions;

     QXmlQuery query;
     query.setQuery(timesQueryUrl);
     query.evaluateTo(&times);

     query.setQuery(directionsQueryUrl);
     query.evaluateTo(&directions);

     if (times.count() != directions.count()) // something went wrong...
         return TimeInformation::List();

     TimeInformation::List information;
     for (int i = 0; i < times.count(); ++i)
         information.append(TimeInformation(times.at(i).simplified(), directions.at(i).simplified()));
Würde dies auch direkt gehen?
Oder muss ich die einzelnen daten jeweils über eine QStringList auslesen, um sie dann zu den Objekten zuverwursten?

phlox
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ich hab selber noch nicht mit den XMLPatterns gearbeitet.
Trotzdem folgendes:
bool QXmlQuery::evaluateTo ( QAbstractXmlReceiver * callback ) const
Hört sich für mich an, als könntest du da was ableiten ;)
Es stellt sich halt die Frage ob es überhaupt geht. Du hast ja zwei verschiedene Queries, die zuerst den namen und danach den vornamen ermitteln. Danach wird geprüft ob die beiden Ergebnislisten gleich lang sind. (Wenn ich den Beispielcode auf dein Problem übertragen darf)

Ich weiß nicht in wie weit die beiden Queries zu einem zusammengefasst werden können. Wenn ja sollte doch dies deine Möglichkeit sein :)

Ansonsten kannst du auch noch mehr Code/Infos posten, damit die Sache klarer wird.

Grüße
Franz
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

Ja, auf QAbstractXMLReceivercbin ich jetzt auch gestoßen, aber frage mich, ob ich dann quasi die Logik wieder implementieren muss, damit ich jeweils die Datensätze korrekt habe.

Code gibts da bisher nicht viel, ist erstmal nur ein Gedankengang gewesen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

phlox81 hat geschrieben:Ja, auf QAbstractXMLReceivercbin ich jetzt auch gestoßen, aber frage mich, ob ich dann quasi die Logik wieder implementieren muss, damit ich jeweils die Datensätze korrekt habe.
Qt liegt im Quelltext offen, so als kleiner Tip ;)

Schau dir an was genau hinter QXmlQuery::evaluateTo(XYZ) steckt.
Schau dir die eine "Beispielimplementierung" des QAbstractXmlReciever an (->QXmlSerializer). Da sollte es genügend Infos geben.

Ich kann dir nicht weitere Details geben, da ich das Zeug noch nie angefasst hab :P, aber vllt. ja wer anderes im Forum hier. Aber prinzipiell ist die Qt-Doku richtig gut, und alles was man wissen sollte steht da auch drin.

Grüße
Franz
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QAbstractXmlReceiver verwenden.

Bei startElement ein neues Listen-Element anlegen.
Bei attribute(...) das Listen-Element befüllen.
Bei endElement() das Listen-Element der Liste hinzufügen.

Und bei der Query was in der Art zurückgeben lassen:
<person name="" vorname="" />
phlox81
Beiträge: 97
Registriert: 7. Juli 2009 12:30
Kontaktdaten:

Beitrag von phlox81 »

Werd das bei Gelegenheit vielleicht noch mal aufgreifen, aber fürs erste habe ich jetzt mit XSLT eine korrekte Transformation hinbekommen.

Dafür habe ich jetzt erstmal einen kleinen XQuery Editor gebastelt.
Antworten