Beim XML-Parsen Text einlesen

Status
Nicht offen für weitere Antworten.

tuomo

Aktives Mitglied
Hallo Java-Gemeide,

ich befasse mich derzeit mit einem für mich vollig neuen Thema. Dem parsen von XML-Dateien.
Da ich auf dem Gebiet absoluter Anfänger bin, hab ich eine Frage, die wahrscheinlich trivial sein dürfte, für mich aber nicht zu bewältigen.

Ich habe ein XML-Dokument, welche ich zerlegen muss/soll.
Code:
<?xml version="1.0" encoding="UTF-8"?>
 <kunden>
  <kunde nr="123">
   <adresse>
    <name>Hassler</name>
    <vorname>jan</vorname>
    <strasse>krumweg</strasse>
    <hnr>45</hnr>
    <plz>45126</plz>
    <stadt>Essen</stadt>
   </adresse>
   <bestellungen>
    <bestellung xsi:schemaLocation="bestellung.xsd">
     <id>123215</id>
     <artikel>Handschuh</artikel>
     <art_nr>1564654</art_nr>
     <anzahl>2</anzahl>
     <preis>8,99<preis>
    </bestellung>
   </bestellungen>
  <kunde>
 </kunden>
Ich benutze StAX zum parsen. Wie ich die einzelnen Tags auslese weiß ich und wie ich an die einzelnen Attribute rankomme auch. Soweit hab ich mich schon reingefummelt. Aber ich will/soll alles zwischen dem <bestellungen>-Tag nicht interpretieren sondern als char[] einfach in der Klasse abspeichern. Mit anderen Worten, wie kann ich dem klar machen, das alles was in Bestellungen steht, nur als Text, uninterpretiert ausgelesen werden soll? In der XMLStreamReader-Klasse hab ich leider keine Methode gefunden, mit der ich den Text als solches auslesen kann. Er findet immer wieder ein Start-Element. Ich wollte das aber auch nicht erst alles auslesen und dann wieder in XML umwandeln bzw. mit ewigen String-gebastel mir das wieder zusammen schustern.

Darum mein Frage:

Geht das überhaupt und wenn ja wie??

Danke. 🙂
 
Hmm, anscheint ist das Problem doch nicht so trivial, wie ich dachte.
Wenn ich mir die Lösungsvorschläge so anschaue.. 😉

Falls jemand doch noch eine Idee hat, wäre ich sehr dankbar. So muss ich mir eben eine Alternative überlegen.

Grüße!
 
Kenne die Stax-API nicht genau. Aber ich denke, dass du nicht drumherum kommen wirst es von Hand zu machen.
 
Es gibt eine Möglichkeit und zwar mit XMLBeans. Da kannst du ganze Elemente sozusagen als String zurückgeben lassen, auch mit Kindern. Du brauchst dafür halt ein XML-Schema und musst dir daraus die Klassen generieren lassen. Ich hab dafür schon ein Tutorial erfasst:
XMLBeans_Tutorial
 
Genau, das ist der Gedanke. Ich habe ein XML-Schema, was verschiedene Kundenaktivitäten repräsentiert, z.B. eine Bestellung. Ich habe auch schon ein (fertigen) XML-Deserializer, welcher über die Schema-Angabe die entsprechenden Klasse erzeugt um die dann weiterzuverarbeiten. Nun wird aber gefordert, das ich den Teil, der durch das spezielle Schema repräsentiert wird, in meine Kunden-Objekt als char[] abrufbar ist um damit dann weiter zu arbeiten. Warum die das so wollen, keine Ahnung. (Lassen wir das mal so im Raum stehen.)

Deswegen wollte ich das, was zwischen dem Bestellungen-Tag steht, einfach nur als Text (String bzw. char[]) auslesen, ohne es zu interpretierten.

Ich hab mir zwar das Tutorial angeschaut, aber ich sehe nicht wo Du den Inhalt in einem Tag als String ausliest. Kannst Du mir verraten wie das geht bzw. welche Methoden ich dafür brauche.

Danke, für euer Hilfe.

@@x.l
Ich habe es derzeit händisch gemacht, also das File als String eingelesen und über String-Methoden entsprechend zerschnippelt und umgebaut. Aber ich habe die Befürchtung, das die Performance mit zunehmender Größe leidet. Deswegen bin ich damit noch nicht so richtig glücklich.. 🙂
 
In meinem Tutorial steht das nicht, das zeigt nur wie ich generell damit umgehe. Aber du kannst das dann ca. so machen:
Code:
//Jedes XMLBean Objekt hat eine save Methode, der kannst du einen OutputStream übergeben:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
xmlBean.save(bos);
String s = new String(bos.toByteArray());
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben