# Wie mit XML umgehen?



## maeck (20. Dez 2008)

Hallo,

ich bin noch super neu in dem Thema XML.
Für meine Studienabschlussarbeit habe ich zwei Klassen, die unabhängig voneinander sein sollen (sagen wir mal, wie Client und Server). Klasse1 bekommt nun Daten aus einer Datenbankabfrage (SPARQL) und packt diese in ein XML-Dokument (test.srx): 
	
	
	
	





```
<?xml version='1.0' encoding='UTF-8'?>
<sparql xmlns='http://www.w3.org/2005/sparql-results#'>
	<head>
		<variable name='clip'/>
		<variable name='address'/>
	</head>
	<results>
		<result>
			<binding name='clip'>
				<uri>http://www.semanticweb.org/...test1.mpg</uri>
			</binding>
			<binding name='address'>
				<literal>C:/...test1.smil</literal>
			</binding>
		</result>
		<result>
			<binding name='clip'>
				<uri>http://www.semanticweb.org/...test2.mpg</uri>
			</binding>
			<binding name='address'>
				<literal>C:/...test2.smil</literal>
			</binding>
		</result>
	</results>
</sparql>
```
Nun muss ich in Klasse2 das XML-Dokument auslesen, um die URI des Clips und die Adresse zu bekommen.
Die URI (clip) soll in einer Liste anzeigt werden und beim Klicken auf den Listeneintrag, die Adresse des Clips (address) an eine andere Funktion weitergegeben werden, die dann die Datei abspielt.

Dafür dachte ich mir, das XML-Dokument auszulesen und in ein mehrdimensionales Array zu packen. 
	
	
	
	





```
[0][0] 1.Clip-URI
[0][1] 1.Clip-Adresse
[1][0] 2.Clip-URI
[1][1] 2.Clip-Adresse
```
Oder kann ich auch immer direkt auf das XML-Dokument zugreifen und die Dinge direkt auslesen?

Da ich mich nicht auskenne, wäre ich sehr dankbar, wenn ihr mir etwas raten könntet.

Vorab schonmal vielen Dank,
maeck


----------



## SlaterB (20. Dez 2008)

XML ist für Datenübertragung gedacht, sicher nicht für Datenhaltung im Programm,
es macht schon oft Sinn, die XML-Daten einmalig auszulesen und in ein Java-Array zu schreiben

man kann noch unterscheiden zwischen einem manuell angelegten + mit manuellen Code gefüllten String[2][2] 
und einer allgemeinen dynamisch/ generisch/ automatisch erstellten Datenstruktor:
Data x = createDataFromXML(file);
(String) x.getData("clip","uri",1);

wie auch immer, falls deine Frage auch beinhaltete, WIE man XML ausliest:
zu so einem großen Thema gibts ganze Bücher oder Kapitel in wichtigen allgemeinen Büchern,
die wichtigesten Schlagwörter sind SAX und DOM/ Dom4j


----------



## maeck (20. Dez 2008)

Hallo SlaterB, danke für deine Einschätzung!





			
				SlaterB hat gesagt.:
			
		

> XML ist für Datenübertragung gedacht, sicher nicht für Datenhaltung im Programm,
> es macht schon oft Sinn, die XML-Daten einmalig auszulesen und in ein Java-Array zu schreiben


Wenn ich dich richtig verstehe, würdest du mir - in meinem konkreten Beispiel - schon dazu raten, das XML-File erst mal in ein mehrdimensionales Array zu packen, bevor ich mit den Daten arbeite (eine Liste fülle)?



			
				SlaterB hat gesagt.:
			
		

> man kann noch unterscheiden zwischen einem manuell angelegten + mit manuellen Code gefüllten String[2][2]
> und einer allgemeinen dynamisch/ generisch/ automatisch erstellten Datenstruktor:
> Data x = createDataFromXML(file);
> (String) x.getData("clip","uri",1);


Das versteh ich nicht wirklich.



			
				SlaterB hat gesagt.:
			
		

> wie auch immer, falls deine Frage auch beinhaltete, WIE man XML ausliest:
> zu so einem großen Thema gibts ganze Bücher oder Kapitel in wichtigen allgemeinen Büchern,
> die wichtigesten Schlagwörter sind SAX und DOM/ Dom4j


Ja beinhaltete sie  aber die Schlagwörter helfen mir schon, mich weitergehend zu informieren.

Ich will nur gern wissen, ob der Ansatz richtig ist, bevor ich lang herumprobiere, denn wie gesagt, ich brauch das für meine Abschlussarbeit und hab leider nicht mehr so viel Zeit (bis ich die abgeben muss) um mich durch zu probieren.

maeck


----------



## SlaterB (20. Dez 2008)

maeck hat gesagt.:
			
		

> Wenn ich dich richtig verstehe, würdest du mir - in meinem konkreten Beispiel - schon dazu raten, das XML-File erst mal in ein mehrdimensionales Array zu packen, bevor ich mit den Daten arbeite (eine Liste fülle)?


naja, wenn du sie in eine Liste füllen willst und danach mit der Liste arbeitest, dann erscheint es natürlich weniger sinnvoll,
sie vorher für 5 ms in einem Array abzulegen 

kommt alles auf die Umstände an, etwa ob es schon einen vorhandenen Import Array -> Liste gibt



> Das versteh ich nicht wirklich.


muss auch nicht sein, eh bisschen zu kompliziert, wahrscheinlich weniger wichtig


----------



## maeck (20. Dez 2008)

SlaterB hat gesagt.:
			
		

> naja, wenn du sie in eine Liste füllen willst und danach mit der Liste arbeitest, dann erscheint es natürlich weniger sinnvoll,
> sie vorher für 5 ms in einem Array abzulegen


Aus dem XML-File würde ich beide Werte (clip und address) in das array laden. In der Liste soll aber nur der clip erscheinen und erst wenn ich den clip auswähle, soll anschließend die adresse ausgeführt werden.

Deswegen dachte ich daran ein array zu nehmen. sonst müsste ich den angeklickten wert erst wieder in dem xml-file suchen und dann die entsprechende adresse herausfinden, oder?

was macht da mehr sinn?

maeck


----------



## SlaterB (21. Dez 2008)

insofern macht das Array Sinn,
externe Dateien möglichst nur einmal lesen, zusammenhängende Daten aus einer Datenbank nur einmal laden usw, recht einfache Regel


----------

