# Bestimmten Wert aus einer XML Auslesen



## Nicer (21. Apr 2010)

Hi !

Ich habe folgendes Problem : Ich lade eine XML Datei aus dem Internet Herunter und möchte nun bestimmte einträge in dieser XML Datei Auslesen. Die Datei liegt fertig heruntergeladen auf meinem PC!

Ich weiß das wird hier bestimmt oft gefragt , ich hab gesucht aber leider nix für mich verständliches / funktionales gefunden.

Hoffe ihr könnt mir da helfen. Ich habe schon von JDOM usw gelesen aber ich hab das nicht verstanden und / oder die dort angegeben Beispiele haben nicht funktioniert und ich war noch verwirrter.

Hoffe IHR könnt mir nun weiterhelfen.


----------



## Noctarius (21. Apr 2010)

Wenn du nur bestimmte Tags brauchst kann du dir mal den Link in der Signatur ansehen


----------



## Nicer (21. Apr 2010)

Wo kannich mir denn die sache Downloaden ?


----------



## Noctarius (21. Apr 2010)

Da du vermutlich kein Maven2 nutzt:
http://repo1.maven.org/maven2/org/sourceprojects/xmlparser/xmlparser/1.0.0/xmlparser-1.0.0.jar (Lib)
http://repo1.maven.org/maven2/org/s...r/xmlparser/1.0.0/xmlparser-1.0.0-javadoc.jar (JavaDoc)
http://repo1.maven.org/maven2/org/s...r/xmlparser/1.0.0/xmlparser-1.0.0-sources.jar (Source)


----------



## Nicer (21. Apr 2010)

Danke , kannstu mir vllt deine ICQ Nummer oder ähnliches per PM schicken dass du mir das mal erklären kannst , bin eher der java Anfänger und will nu nich das Forum flooden. Und der Chat der seite hier funtzt bei mir leider nicht.


----------



## Noctarius (21. Apr 2010)

Kannst ruhig das Forum flooden 

Ich kann dir auch ein lauffähiges Beispiel dafür machen. zeig mal etwas von dem XML Code und sag mal genau welche Werte du da brauchst und vor allem wie du später auf diese Werte zugreifen möchtest (z.B. als Liste).


----------



## Nicer (21. Apr 2010)

Oki 

Also , mein vorhaben ist dassich mir für Technobase.fm einen Trackviewer bauen will. Technobase stellt folgende XML mit allen nötigen Infos zur verfügung : Link

Die XML lade ich runter usw das passt alles , sie liegt auf "C:/Technobasexml.xml".

Aus der möchte ich nun die Folgenden Werte auslesen und in jeweils ein eigenes string setzen :

Name , Moderator , Show , Style , Artist , Song , Listener.

Ich möchte mir das dann Später in eine GUI Einbauen die dass dann in Labeln oder Textfeldern anzeigt ( bin noch am überlegen ).

Wäre nice wenndu mir da n Code schreiben könntest.


----------



## Noctarius (21. Apr 2010)

Jopp werde ich nachher mal fix ein Beispiel für den XmlParser basteln. Bin so gegen 6 zuhause, also wird so 7 Uhr rum


----------



## Nicer (21. Apr 2010)

Wie kannich dass dann in mein programm integrieren ? am allerliebsten wäre mir natürlich eine Klasse , von denen ich dann diese Strings abrufen kann , so könnte ich sie mit meinem Kenntnisstand sehr easy integrieren


----------



## Noctarius (21. Apr 2010)

So in der Art war das gedacht. Eine Liste mit Inhalt vom Typ TrackInfo oder sowas wo du dann an die Informationen kommst. Ich schau gleich mal


----------



## Nicer (21. Apr 2010)

TrackInfo ? ^^ noch nie gehört , steht aber bestimmt im "Java ist auch eine Insel 8" drinne ^^ gleich mal lesen 

Hauptsache ich kann das nacher per Knopfdruck bzw Timer die ganzen Werte in Labels einsetzen kann.

Am Liebsten wäre mir eine Klasse "XMLReader" die die sache ausliest und sie dann als ein Objekt zur verfügung stellt. Dann würde ich das gerne einfach per getter methode da raushohlen können ^^


----------



## Noctarius (21. Apr 2010)

Nein die Klasse erzeuge ich mit den passenden Datenfeldern die du haben möchtest (gefüllt mit den Werten aus dem XML)


----------



## Nicer (21. Apr 2010)

Ja das wäre ja nochmal besser , dann brauchich nich extra n objekt erstellen , und kann das gleich von der klasse abrufen oder was ? COOL , auch wennich iwann mal gelernt habe dass alles was man auf einer klasse aufruft nich OOP ist ( glaubich ).

dann bräuchte die klasse halt noch eine "refresh" methode die die daten aus der XML neu abruft.


----------



## Noctarius (21. Apr 2010)

So ich bau da gleich mal was 

Erstmal jetzt heimwärts kommen.


----------



## Nicer (21. Apr 2010)

Okey , dann vielen dank , du kannst dich ja wenndu @home bist mal bei mir im ICQ melden , ich schreib dir me PM mit meiner UIN 

Edit : Ich bin nu mal offline bis ca 20:30 hoffe bis dahin hastu was gebastelt 

Das nächste problem dass aufkommt : ich bräuchte einen "Timer" , der die methode "refresh" alle 20 sekunden aufruft.


----------



## Noctarius (21. Apr 2010)

Da bitte, komplette Lib zum direkten benutzen  XmlParser liegt in Version 1.0.0 bei. Das Timerproblem hat ja hier mit nichts zu tun


----------



## Nicer (21. Apr 2010)

Ich hab nu meine Refresher Methode die folgendermaßen aussieht :


```
private void refresh() throws Exception {
		name.setText("Radiostream :" + " " /* + name */);
		moderator.setText("Moderator :" + " " /* + moderator */);
		show.setText("Show :" + " " /* + show */);
		style.setText("Style :" + " " /* + style */);
		artist.setText("Artist :" + " " /* + artist */);
		song.setText("Song :" + " " /* +song */);
		listener.setText("Listener :" + " " /* + listener */);

	}
```

Was mussich da nu reinpacken ? Will NUR das Technobase Radio haben 

*verwirrt ist*


----------



## Noctarius (21. Apr 2010)

Demo ansehen und verstehen


----------



## Nicer (21. Apr 2010)

Falls du die "HowToUse.java" meinst...naja daraus kannich nur schliessen dassdu das alles in einen Vector Container wirfst und darüber Itarierst...

aber wie genau ich nu an meine werte komme keine ahnung , bitte um ausführliche erklärung für Dummys 

Bin mal essen , gegen 21:30 wieder da.


----------



## Noctarius (21. Apr 2010)

Dann schaust du dir eben die Klasse TrackInfo an und dann sollte es klar sein. Ein wenig Mitdenken muss man als Programmierer schon  Und so riesig ist die Klasse jetzt nicht.


```
package com.example.xmlparser;

public class TrackInfo {
	private final String name;
	private final String moderator;
	private final String show;
	private final String style;
	private final String artist;
	private final String song;
	private final int listener;

	public TrackInfo(String name, String moderator, String show, String style,
			String artist, String song, int listener) {
		this.name = name;
		this.moderator = moderator;
		this.show = show;
		this.style = style;
		this.artist = artist;
		this.song = song;
		this.listener = listener;
	}

	public String getName() {
		return name;
	}

	public String getModerator() {
		return moderator;
	}

	public String getShow() {
		return show;
	}

	public String getStyle() {
		return style;
	}

	public String getArtist() {
		return artist;
	}

	public String getSong() {
		return song;
	}

	public int getListener() {
		return listener;
	}

	@Override
	public String toString() {
		return "TrackInfo [artist=" + artist + ", listener=" + listener
				+ ", moderator=" + moderator + ", name=" + name + ", show="
				+ show + ", song=" + song + ", style=" + style + "]";
	}
	
}
```


----------



## Nicer (21. Apr 2010)

MAN binnich dumm , ich versuch auch die ganze zeit die werte direkt auf der klasse abzurufen anstatt auf dem Objekt ^^

Habs nu , Vielen dank 

Ich kann die einzelnen Strings gaaanz einfach abrufen ÜBER :


```
TechnobaseUtility.getActualTracklist("http://tray.technobase.fm/radio.xml").get(0).getArtist()
```
usw ^^

nu gibts noch ein problem

im eclipse beim Ausführen geht alles

ABER

wennich das programm dann zu ner .jar compile werden die werte nich angezeigt ...


EDIT : hat sich erledigt ^^ ich hatte keine Runnable Jar sondern eine Jar gemacht -.-^^

Typischer FLüchtigkeitsfehler 

Vielen Dank


----------



## kinglui (12. Mai 2010)

Hallo,
kann dein Tool auch Parameter auslesen, wenn man nur einen XML String hat?
Also zB.

```
<Users>
<User id="USERID" Language="en" Action="Update">
<name> name </name>
</User>
<User id="USERID" Language="en" Action="Update">
<name> name </name>
</User>
</Users>
```

ich würde jetzt gerne 2 Objekte vom Typ User erzeugen und per setter den "namen" und die "user id" zuweisen.
Ginge das mit deinem Tool?

danke


----------



## Noctarius (12. Mai 2010)

Japp würde auch funktionieren, sogar ziemlich ähnlich. Musst halt nur einen passenden Parser dazu bauen.


----------



## kinglui (12. Mai 2010)

Dein Tool ist doch der Parser, oder hab ich was falsch verstanden?
ich schau mich mal am Beispiel schlau!

danke


----------



## Noctarius (12. Mai 2010)

Nee der Parser ist eine Lib im Hintergrund (unten in der Signatur). Das Tool oben instrumentiert den nur


----------



## kinglui (12. Mai 2010)

Vielen dank.
das läuft (bisher).


Wie kann ich allerdings einen Parameter auslesen?
also nicht <bla> inhalt </bla> sondern <bla name="parameter" ...> 
?

Könntest du mir da nen Tippchen geben, oder hast du schon was Vorgefertigtes?

Danke


----------



## Noctarius (12. Mai 2010)

In der Parser-Methode:

```
element.getAttribute("name");
```


----------



## kinglui (12. Mai 2010)

Vielen Dank,

läuft jetzt!


----------



## Noctarius (12. Mai 2010)

Kein Problem 
Nur zur Information für mich selber (zur API Optimierung): Ist die Dokumentation der Methoden verständlich und die API an sich klar gegliedert?


----------



## Nicer (12. Mai 2010)

du könntest ja immer 
	
	
	
	





```
//@
```
 commis zur Eclipse Doku machen ^^


----------



## Noctarius (12. Mai 2010)

Nicer hat gesagt.:


> du könntest ja immer
> 
> 
> 
> ...



Hm?


----------



## kinglui (13. Mai 2010)

Um ehrlich zu sein, war dein Beispiel von der Vorseite so gut, dass ich die Doku garnicht brauchte.
Aber ich werde morgen mal drüber hinweg fliegen und dir Feedback geben!

Ciao


----------



## Noctarius (13. Mai 2010)

Das das Beispiel gut war ist doch auch schon mal was  Hast du den 2.0 Dev-Zweig genommen oder noch den 1.0 von hier aus dem Projekt?


----------



## kinglui (13. Mai 2010)

hi,

also ich hab das gesamte Zipfile aus dem o.g. Thread genommen. Also schätze ich mal wars die 1.0er oder? (btw. auf der Projektseite habe ich auch nur die 1.9er Version gefunden).


Obwohl die Doku extrem ausführlich ist, muss ich leider auch gleichzeitig die Komplexität bemängeln.
Mir wäre um ehrlich zu sein eine etwas "sprachliche" (selbstredende) Doku lieber, als das ganze technische.

Aber das ist vielleicht auch nur meine Meinung

CIao


----------



## Noctarius (14. Mai 2010)

Nein auf Dauer wird eine richtige textliche Dokumentation kommen, nur ich bin immer so ein kleiner Doku-Muffel und musste mich schon zu dem JavaDoc Zeug zwingen 
Genau im Zip war noch die Version 1.0, 1.9 bzw 2.0 ist noch in der Entwicklung und wird dann auch eine größere Dokumentation erhalten. Zusätzlich macht 2.0 einige Dinge einfacher und bringt trotzdem mehr Möglichkeiten mit die entsprechenden Tags zu definieren (z.B. per XPath Expression).


----------

