PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XML mit Qt



ChMaster|LFreak
29-04-2004, 23:33
Hallo,

ich versuch seit geraumer zeit ,3 Tage :), was über XML mit Qt
zu finden. Ich habe zwar einges gefunden, ist aber nicht das richtige :(.

Nun zu meinem Problem:

Ich habe eine XML - Datei die ich gerne auslesen möchte, nur auslesen.
In ihr sind Verschiedene Namen mit besonderen eigenschaften
enthalten, genaugenommen 7 eigenschaften) diese Eigenschaften
sind unterteilt in:

Name, Rasse, Klasse, Stufe, Rang, Reichspunkte und Beruf.

Nun ich möchte diese Eigenschaften in einer ListView (7 Spalten) angezeigt bekommen.

Ich würde mich freuen wenn mir einer helfen könnte.

Und hier ein kleiner auschnitt aus der XML datei:

<character name="Acies" laston="Recently">
<race>Bretone</race>
<class>Infiltrator</class>
<level>36</level>
<guildrank>0</guildrank>
<totalrp>7380</totalrp>
<lastweekrp>0</lastweekrp>
<anon>False</anon>
</character>

<character name="Agelor" laston="Recently">
<race>Bretone</race>
<class>Arawnritter</class>
<level>24</level>
<guildrank>0</guildrank>
<totalrp>376</totalrp>
<lastweekrp>88</lastweekrp>
<anon>False</anon>
</character>

<character name="Ariele HeLLcAsTer" laston="Recently">
<race>Avalonier</race>
<class>Hexe</class>
<level>29</level>
<guildrank>0</guildrank>
<totalrp>126</totalrp>
<lastweekrp>0</lastweekrp>
<anon>False</anon>
</character>

..... es sind noch weitere namen und eigenschaften.

wie bewerkstelle ich dies?

Mfg
ChMaster|LFreak

axeljaeger
30-04-2004, 07:46
Guck doch mal in der API-Documentation von QDomDocument.

anda_skoa
30-04-2004, 15:28
Das ist relativ einfach und geht in etwa so




QFile file(filename);
if (!file.open(IO_ReadOnly)) return; // cannot read file

QDomDocument doc;
if (!doc.setContent(&file)) return; // cannot parse file

QDomElement rootElement = doc.documentElement();

// gehe mal davon aus, dass die character Element gleich darunter kommen
QDomNodeList characters = rootElement.childNodes();
for (uint i = 0; i < characters.length(); ++i)
{
QDomNode node = characters.item(i);
if (node.isNull() || !node.isElement() || node.nodeName() != "character") continue;

QDomElement element = node.toElement();
QString name = element.attribute("name");
QString lastOn = element.attribute("laston");
}


Für die untergeordneten Element geht es praktisch gleich.

Bei QDomElement::attribute kann man als zweiten Parameter einen String angeben, der als Default genommen wird, wenn das Attribut nicht vorhanden ist.

Ciao,
_

ChMaster|LFreak
01-05-2004, 23:35
danke, dies funktioniert auch einwandfrei:


........
// gehe mal davon aus, dass die character Element gleich darunter kommen
QDomNodeList characters = rootElement.childNodes();
for (uint i = 0; i < characters.length(); ++i)
{
QDomNode node = characters.item(i);
if (node.isNull() || !node.isElement() || node.nodeName() != "character") continue;

QDomElement element = node.toElement();
QString name = element.attribute("name");
QString lastOn = element.attribute("laston");

Label->setText( name ); // hinzugefügt
}


bekomm aber nicht im Label die namen angezeigt, warum nicht?

anda_skoa
03-05-2004, 08:46
Das name Attribut des letzten Characters ist vielleicht leer.
Bei sowas würde man wahrscheinlich den Eintrag ignorieren also etwa:



if (name.isEmpty()) continue; // naechster Node


Am besten du machts gleich LitView Items oder due hängst in der Schleife den neuen Namen an den schon vorhanden String an, so kriegst du ja immer nur den letzten Eintrag und das bringt IMHO nicht so viel.

Ciao,
_

ChMaster|LFreak
08-04-2005, 12:09
gelöscht, neuer thread vorhanden :)

anda_skoa
09-04-2005, 16:22
Du machst in der Parsing Methode eine neue Listbox als Kind der übergebenen.

Ich nehme an, die willst in Wirklichkeit die Einträge in die übergebene Listbox eintragen.

Ciao,
_

P.S. Die Frage ist zwar thematisch mit dem Thread zusammenhängend, aber ich würde es begrüßen, wenn du für eine neue, nicht direkt zusammenhängenden Frage einen neuen Thread (neues Thema) erzeugen würdest.

ChMaster|LFreak
09-04-2005, 20:06
ja ich möchte das item ind an die listbox übergeben
Hier (http://www.mrunix.de/forums/showthread.php?t=38736) der neue thread :)

ChMaster|LFreak
09-04-2005, 23:46
gelöst siehe hier (http://www.mrunix.de/forums/showthread.php?t=38736)

mfg
ChMaster|LFreak