Java XML Parsen, Warcraft Armory, direkte Element suche

Osborn

Lieutenant
Registriert
Juli 2005
Beiträge
519
Halli hallo liebe Mitmenschen,

ich versuche gerade das World of Warcraft Arsenal zu durchsuchen/parsen/crawlen/scannen.

http://eu.wowarmory.com/

Nun bin ich schon soweit, dass ich Seiten mit URLConnection in eine File schreibe und dann mit DOM ausgeben. Also so sieht der Anfang aus:

Code:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse(file);
...
Nun kann gehe ich mit verschiedenen FOR Schleifen, getChildNodes, getAttributes, getItem, usw. durch das ganze Dokument und eine Ausgabe sieht dann zum Beispiel so aus:

Code:
1 page 0:globalSearch="1" 1:lang="en_us" 2:requestUrl="/guild-info.xml"
    1 guildKey 0:factionId="0" 1:name="Auge des Sturms" 2:nameUrl="Auge+des+Sturms" 3:realm="Gilneas" 4:realmUrl="Gilneas" 5:url="r=Gilneas&n=Auge+des+Sturms"
    3 guildInfo
        1 guild
            1 members 0:filterField="" 1:filterValue="" 2:maxPage="1" 3:memberCount="180" 4:page="1" 5:sortDir="a"
                1 character 0:achPoints="4365" 1:class="Rogue" 2:classId="4" 3:gender="Female" 4:genderId="1" 5:level="80" 6:name="Ammenra" 7:race="Human" 8:raceId="1" 9:rank="0" 10:url="r=Gilneas&n=Ammenra"
                3 character 0:achPoints="6030" 1:class="Priest" 2:classId="5" 3:gender="Male" 4:genderId="0" 5:level="80" 6:name="Silanz" 7:race="Night Elf" 8:raceId="4" 9:rank="1" 10:url="r=Gilneas&n=Silanz"
                5 character 0:achPoints="5820" 1:class="Warlock" 2:classId="9" 3:gender="Female" 4:genderId="1" 5:level="80" 6:name="Emeralda" 7:race="Human" 8:raceId="1" 9:rank="1" 10:url="r=Gilneas&n=Emeralda"
...
Die XML Quelldatei so:

Code:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/guild-info.xsl"?><page globalSearch="1" lang="en_us" requestUrl="/guild-info.xml">
  <guildKey factionId="0" name="Auge des Sturms" nameUrl="Auge+des+Sturms" realm="Gilneas" realmUrl="Gilneas" url="r=Gilneas&amp;n=Auge+des+Sturms"/>
  <guildInfo>
    <guild>
      <members filterField="" filterValue="" maxPage="1" memberCount="180" page="1" sortDir="a">
        <character achPoints="4365" class="Rogue" classId="4" gender="Female" genderId="1" level="80" name="Ammenra" race="Human" raceId="1" rank="0" url="r=Gilneas&amp;n=Ammenra"/>
        <character achPoints="6030" class="Priest" classId="5" gender="Male" genderId="0" level="80" name="Silanz" race="Night Elf" raceId="4" rank="1" url="r=Gilneas&amp;n=Silanz"/>
        <character achPoints="5820" class="Warlock" classId="9" gender="Female" genderId="1" level="80" name="Emeralda" race="Human" raceId="1" rank="1" url="r=Gilneas&amp;n=Emeralda"/>
...

Aber ich möchte nicht selber eine bestimmte Stelle selber suchen, sondern DOM suchen lassen, aber das bekomme ich nicht hin. Kann mir jemand sagen, wie das geht? Ich nehme an, dass es irgendwie mit getElement... gehen muss, aber es klappt einfach nicht.

Wie kann man direkt zum Beispiel "gender" von "Silanz" auslesen?
 
Zuletzt bearbeitet: (mehr Info, spezifischer)
Ich würd jetzt getElementsByTagName("character") und dann for-Schleife über das Array und mit If-Anweisung den Namen prüfen.
 
Ja, so habe ich das jetzt auch gemacht. Hatte gehofft, dass es da einen eleganteren Weg gibt.
 
Hi Osborn,

hast Du Dir schon mal XPath angeguckt?Ich glaube, das könnte Dir helfen die Daten aus dem XML-Dokument bequemer zu extrahieren.
Man kann damit beispielsweise alle character-Knoten mit dem Attribut classe=Rouge herausbekommen. Ich glaube, der Pfad sähe dann so aus: //character[@class=Rouge], bin mir jetzt aber nicht sicher.

Vielleicht hilft Dir dieser Artikel weiter. Ich habe ihn nur kurz überflogen, aber er sieht ganz brauchbar aus. Ansonsten findest du im Netz etliche Seiten mit Beispielen für die Pfadsyntax, denn das ist das Herzstück, ohne das man nicht weiter kommt.
Wenn es nicht klappen sollte, dann frag einfach nochmal, vielleicht kann ich oder jemand anders Dir noch helfen.

Viel Erfolg!


schöne Grüße
munchkin
 
Wow, vielen dank, das sieht genau nach dem aus, was ich suche. Werde mir das morgen mal genauer anschauen, aber das sieht sehr sehr gut aus :) Wundere mich gerade auch, dass ich über so etwas wichtiges bezgl. XML parsen nicht selber irgendwo drüber gestolpert bin :(
 
Zurück
Oben