Anzeige:
Ergebnis 1 bis 9 von 9

Thema: XML mit Qt

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70

    XML mit Qt

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Guck doch mal in der API-Documentation von QDomDocument.

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das ist relativ einfach und geht in etwa so

    Code:
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70

    Red face

    danke, dies funktioniert auch einwandfrei:
    Code:
    ........
    // 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?

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das name Attribut des letzten Characters ist vielleicht leer.
    Bei sowas würde man wahrscheinlich den Eintrag ignorieren also etwa:

    Code:
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70
    gelöscht, neuer thread vorhanden
    Geändert von ChMaster|LFreak (09-04-2005 um 20:04 Uhr)

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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.
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70
    ja ich möchte das item ind an die listbox übergeben
    Hier der neue thread

  9. #9
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70
    gelöst siehe hier

    mfg
    ChMaster|LFreak

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •