XML-Struktur auslesen mit mehreren identischen Tags
-
Hallo zusammen,
ich habe folgende XML-Struktur:
<?xml version="1.0" encoding="utf-8"?> <skills> <fraktion Ordnung="1"> <rasse Zwerg="1"> <klasse Runenpriester="1"> <skill> <stufe>Wert</stufe> <name>Wert</name> <wirkung>Wert</wirkung> <pfad>Wert</pfad> <kosten>Wert</kosten> <reichweite>Wert</reichweite> <zauberzeit>Wert</zauberzeit> <abklingzeit>Wert</abklingzeit> <info>Wert</info> </skill> <skill> <stufe>Wert</stufe> <name>Wert</name> <wirkung>Wert</wirkung> <pfad>Wert</pfad> <kosten>Wert</kosten> <reichweite>Wert</reichweite> <zauberzeit>Wert</zauberzeit> <abklingzeit>Wert</abklingzeit> <info>Wert</info> </skill> <skill> <stufe>Wert</stufe> <name>Wert</name> <wirkung>Wert</wirkung> <pfad>Wert</pfad> <kosten>Wert</kosten> <reichweite>Wert</reichweite> <zauberzeit>Wert</zauberzeit> <abklingzeit>Wert</abklingzeit> <info>Wert</info> </skill> <skill>
So setzt sich das fort.
Nun will ich erreichen, dass ich nacheinander die einzelnen skill-tags durchlaufen kann und mich vorher zu einem bestimmten <klasse>-Tag springen kann.Meine Fragen:
1. Ist die Benennung so okay für das <klassen>-tag dass ich da mit einem Befehl hinspringen kann?
2. Wir kann ich die <skill>-Tags nacheinander durchlaufen?
-
Wie willste das eigentlich auslesen? Soll es nur einmal geparst und dann auf für Zugriffe effiziente Strukturen abgebildet werden? Oder willst Du die Diva TXMLDocument bemühen? Ich würde nicht individuelle Attributnamen verwenden eher sowas wie
<rasse name="Zwerg">
<klasse name="Runenpriester">
-
es soll einmal geparst werden und dann an verschiedene Arrays und Variablen weitergegeben werden, um diese dann in nem Tree+Frame anzeigen zu lassen.
Mit der Benennung, die du da hast, wie komme ich da an den Inhalt von name="xyz"?
Ist dafür die Funktion GetLocalName() die richtige?
-
Du kannst Dich hierarchisch durcharbeiten:
_di_IXMLDocument doc = LoadXMLDocument(...); _di_IXMLNodeList rows = doc->DocumentElement->ChildNodes->FindNode("fraktion")->ChildNodes; //für jede Rasse for (int rownr = 0; rownr < rows->Count; rownr++) { //Name auslesen String name = rows->Get(rownr)->GetAttribute("name"); ...
usw. Ungeprüft.
-
supi danke dir
Läuft
Gibt es auch ne Möglichkeit, direkt zu einem tag zu springen, dessen Attribut man kennt?
Also gibt z.B. eine Rasse Zwerg und dann eine Rasse Imperium.
Wenn ich nun direkt zu dem Knoten Imperium springen will, geht das?
Oder ist es da am besten, mich durch die Knoten zu hangeln und jeweils das Attribut abzufragen?
-
Auf die Attribute eines Knotens kannst Du mit der Attributes-Aufzählung arbeiten
node->Attributes["name"]. Ich würde mir eine Funktion schreiben die durch die Knoten geht und den Knoten zurückliefert, dessen Attribut "Name" den gewünschten Inhalt besitzt.
-
oki, dann werde ich das morgen mal testen, bisher läuft das alles so weit.
Jetzt muss ich nurnich durch die Skill-Tags manövrieren und dann hab ich alle Infos, die ich aus dem XML brauche, ausgelesen und abgespeichert