# (JSP, JavaBean, XML) String zerlegen



## Marie Curie (16. Dez 2007)

Hallo alle zusammen,

ich hab folgendes Problem:
In einer JSP werden Eingaben aus einem Formular abgefangen, diese werden in String-Variablen als xml-Tags gespeichert und in ne ArrayList gepackt, also folgendermaßen:


```
String eingabe = "<xml-Tag>" + request.getParameter("eingabe") + "</xml-Tag>";
ArrayList.add(eingabe);
```

Die xml-Tags werden benötigt, weil aus den Eingaben des Benutzers und Daten aus einer Datenbank eine xml-Datei erstellt werden soll.

Nachdem die Eingaben des Benutzers vollständig sind, sollten sie dem Benutzer nochmal zur Prüfung angezeigt werden und optimalerweise sogar geändert werden können.

Nun hab ich mir gedacht, dass ich jedes Objekt aus der ArrayList nehme und den String zerlege, damit ich die Daten in dem Formular anzeigen kann. 

Ich finde nur keinen Ansatz, wie ich da anfangen könnte. Zu dem hab ich das Problem, die Tags voneinander zu unterscheiden. Hat jemand von euch vllt. eine Alternative oder kann mir nen Tipp geben, wie ich anfange und das anstellen könnte?

Danke für eure Hilfe,

liebe Grüße
Marie


----------



## Andreas29 (16. Dez 2007)

Hi Marie,

ich glaube, ich würde nicht die fertig zusammengebauten XML-Strings in die Liste reintun, sondern nur die reinen, vom Benutzer eingegebenen Daten. Dann brauchst du sie zwecks erneuter Ausgabe in der JSP-Seite nicht irgendwie auseinanderbauen. Die XML-Tag-Struktur würde ich dann erst zusammenbauen, wenn alle Daten validiert (sprich vom User bestätigt) wurden und komplett vorliegen. Je nach Umfang kann man dort entweder mit StringBuilder, DOM oder sogar einem OX-Mapper arbeiten. Was man dort genau verwendet, hängt halt davon ab, wie aufwendig / kompliziert dein zu erstellendes XML ist.

Grüße und hoffe, Dir geholfen zu haben,
Andreas


----------



## Marie Curie (16. Dez 2007)

Hallo Andreas,

doch, das hilft mir wirklich schon ein bisschen! Dein Vorschlag ist mir auch schon mal gekommen, nur mein Problem dabei ist folgendes:

Im Formular gebe ich den Textfeldern natürlich eindeutige Namen, anhand dessen ich die xml-Tags erstelle, das sieht ungefähr so aus:

Formular:

```
<input type="text" name="currency">
```

jsp:

```
String currency = "<currency>" + request.getParemeter("currency") + "</currency>";
```

Mal angenommen, ich würde es so machen wie du sagst (was ganz sicher auch die bessere Lösung ist  ), wie kann ich dann die Strings in der ArrayList voneinander unterscheiden? Also dass ich sagen kann String1 beinhaltet den Währt für den Tag <currency>.

Danke für deine Hilfe.

Liebe Grüße,
Marie


----------



## Andreas29 (17. Dez 2007)

Hi Marie,

wenn du beide Werte brauchst (also den Namen des Textfeldes sowie den Inhalt), würde ich mir dafür eine eigene Klasse anlegen, die diese beiden Werte speichert. Dort kannst du dann auch eine hübsche Methode hinterlegen, die dir den Wert als XML liefert, also irgendwas wie:

```
public String getValueAsXml() {
    return "<"+fieldName+">"+value+"</"+fieldName+">";
}
```
Dann wärst du objektorientiert und hättest einen schönen sauberen Code. Achso, eins noch: An Stelle der hier auch von mir verwendeten Stringverkettung würde ich einen StringBuilder (ab Java 5) oder einen StringBuffer empfehlen. Die arbeiten in solchen Fällen schneller. Falls du Java 5 einsetzt und nicht mit mehreren Threads arbeitest, ist der StringBuilder vorzuziehen, da dieser nicht synchronisiert ist.

Ich hoffe, ich habe dich jetzt nicht mit zu vielen Details zugeschüttet...

Grüße,
Andreas


----------



## Marie Curie (17. Dez 2007)

Hallo Andreas,

danke für deine Antwort 

Dazu hab ich aber noch eine Frage. Das Verfahren mit der eigenen Klasse ist mir klar (habe ich bisher bei ResultSets aus Datenbanken verwendet).

Jetzt hab ich während dem Schreiben meine Frage im Kopf selber beantwortet  ich werd das so mal ausprobieren, ist ne prima Idee, danke! 

Ich hoffe du stehst für weitere Fragen trotzdem noch zur Verfügung 

Liebe Grüße,
Marie


----------



## Andreas29 (17. Dez 2007)

Hi Marie,

klaro tue ich das. Bei Fragen fleißig hier posten. Ich bin da guter Dingen, dass du dann eine vernünftige Antwort bekommst. 

Liebe Grüße,
Andreas


----------

