XML mit Dom

syscon

Mitglied
Hallo

ein Frage wie lese ich mit Dom unter Elemente aus ?

Angenommen ich habe eine XML Datei folgenden Formates

[XML]
<players>
<player>Player1 </player>
<player>Player2</player>
</players>
[/XML]

Wie bekomme ich die Player da einzelnt raus? Mein Code bis jetzt:

Java:
static public GameState loadGameState(InputStream inputStream) throws LoadGameException {
		try{
			
			DocumentBuilderFactory fact =DocumentBuilderFactory.newInstance();
			fact.setValidating(true);
			fact.setIgnoringElementContentWhitespace(true);
			DocumentBuilder builder=fact.newDocumentBuilder();
			Document doc = builder.parse(inputStream);
 

syscon

Mitglied
Java:
NodeList playerNodes=doc.getElementsByTagName("player");
		
		for(int i=0; i<playerNodes.getLength();i++){
			
			Node playerNode =playerNodes.item(i);	
			String s=playerNode.getTextContent();
			
			System.out.println(s);
			
			
		}

so in etwa?

Ich weiß jetzt nur nicht wie ich sagen kann, dass er mir nur für das Element players die Unterelemente ausgibt angenommen es gäbe in der XML Datei auch noch (Ich weiß beispiel etwas blöd)

[XML]
<players>
<player>Player1 </player>
<player>Player2</player>
</players>
<otherplayers>
<player>Player1 </player>
<player>Player2</player>
<otherplayers>

[/XML]
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Wenn du in die Java API schauen würdest, würdest du sehen, dass es für alle eine passende Methode gibt. Drei hab ich dir als Beispiel bereits genannt.
Allerdings bin ich nicht gerade ein Freund von DOM und SAX - welche bei Java SE dabei sind -, sondern verwende lieber JDOM. Mit JDOM kannst du ganz einfach die Nodes auslesen. Solltest du dir ggf. mal anschauen.
 

syscon

Mitglied
ich habe in die Java Api geschaut und nichts passendes gefunden bis jetzt deshalb habe ich gefragt! Leider muss es mit Dom gemacht werden.

lg
 
T

Tomate_Salat

Gast
Ich würde hier groovy verwendet:
[xml]<?xml version="1.0" encoding="utf-8"?>
<game>
<players>
<player score="100">Player1</player>
<player score="50">Player2</player>
<player>Player3</player>
</players>
<visitors>
<player>Player4</player>
<player>Player5</player>
</visitors>
</game>[/xml]

Java:
class Players 
{
	public static void main(String[] args) 
	{
		def xml=new XmlSlurper().parse("players.xml");
		
		println "Current Players:"
		xml.players.player.each {
			println (it.text() + " : " + it.@score)
		}
		
		println "\n\nVisitors:"
		xml.visitors.player.each {
			println (it.text() + " watches the game")
		}
	}
}

ausgabe:
Code:
Current Players:
Player1 : 100
Player2 : 50
Player3 : 


Visitors:
Player4 watches the game
Player5 watches the game
 
S

SlaterB

Gast
hmm ja, ich würde jetzt auch auf der Terrasse ein Eis essen,
hoffe geholfen zu haben ;)






[dies ist ein versteckter moderatorischer Hinweis]
 
T

Tomate_Salat

Gast
Wieso. Groovy kannst du einfach in deinem Java-Projekt verwenden. Du brauchst dein Projekt nicht umbauen und nichts. In Eclipse einfach die Groovy-Nature hinzufügen und mein Code läuft in seinem aktuellen Projekt. Das ist imho nicht viel mehr aufwand, als eine Bibliothek einzubinden. Was spricht also dagegen?


--------
> hmm ja, ich würde jetzt auch auf der Terrasse ein Eis essen

würde ich jetzt auch gerne :D
 
S

SlaterB

Gast
dagegen spricht z.B. dass man in der Regel nicht nur ein println haben will, sondern komplexen weiteren Java-Code,
der hier auch nach Groovy zu transferieren wäre oder getrennte Klassen,
kannst ja wenigstens den Aufruf aus einer Java-Klasse und Rückgabe der Ergebnisse etwa in einer List dazugeben,
aber nun gut, nicht mehr Diskussion von mir dazu
 
T

Tomate_Salat

Gast
Groovy generiert Bytecode den du wunderbar auch in Java verwenden kannst - und umgekehrt. Man hat hier keine Abstriche. Hier mal ein KSKB ausgehend von meiner geposteten XML:

Game.java
Java:
import java.util.ArrayList;
import java.util.List;

public class Game 
{
	private List<String> players;
	private List<String> visitors;
	
	public static void main(String[] args) {
		Game game=new Game();
		GroovyXMLReader gxr=new GroovyXMLReader();
		gxr.readIn(game);
		
		System.out.println(game);
	}
	
	public Game() {
		players=new ArrayList<String>();
		visitors=new ArrayList<String>();
	}
	
	public void addPlayer(String player)
	{
		players.add(player);
	}
	
	public void addVisitor(String visitor)
	{
		visitors.add(visitor);
	}
	
	@Override
	public String toString() {
		return "Players" + players.toString() + " Visitors" + visitors.toString() ;
	}
}

GroovyXMLReader.groovy
Java:
class GroovyXMLReader 
{
	public void readIn(Game game)
	{
		def xml=new XmlSlurper().parse("players.xml")
				
		xml.players.player.each {
			game.addPlayer(it.text())			
		}
				
		xml.visitors.player.each {
			game.addVisitor(it.text())			
		}
	}	
}

Ausgabe:
Code:
Players[Player1, Player2, Player3] Visitors[Player4, Player5]
 

syscon

Mitglied
Leider Gottes ist das eine Uni Aufgabe und wenn da steht Mach das damit muss man es damit machen :(

Ich habe mein Problem jetzt erstmal umgangen ... Allerdings wäre es toll wenn jemand doch noch eine schöne Lösung für Dom parat hätte :) so für die Klausur ... Leider sind die Uni Materialien eher wenig bis nicht zu gebrauchen naja man kämpft sich halt so durch :rtfm:

Trotzdem danke für eure Antworten :toll:
 

Oben