Wie aus String geschickt(!) ein XMLDokument(Objekt) erstellen...
-
Hi.
Ich schreibe immer noch an meinem Bot und die wichtigste Funktion steht noch aus.
Man schickt eine Nachricht der Form:Ist zwar kein Java, aber so ists schön formatiert :) !send <to>Name des Empfängers</to> <re>Testnachricht</re> <msg>Hier kommt die Nachricht rein</msg>
Und genau das bekommt der Bot als String.
Jetzt würde ich gerne aus diesem String ein XMLDokument machen.
Ich verwende JDOM und hatte (als ich vor ein paar Tagen aufgehört hatte zu proggen) das Problem, dass ich nicht genau wusste, wie ich aus diesem String am geschicktesten ein XMLObjekt (weiss jetzt nicht genau, wäre das nen JDOM?)
mache.Dabei ist mir wichtig,
1. Der String...bzw. das daraus resultierende Objekt soll/muss auf korrekte XMLSyntax validiert werden.Und die einzige Möglichkeit welche ich dabei sehe, ist, dass ich den String, in eine temporäre Datei schreibe, und diese wieder auslese, und dabei einen validierenden Parser benutze.
Für mich würde das heissen Datei anlegen, öffnen, schreiben, schliessen, öffnen, auslesen, validieren, schliessen, Dateilöschen?!
VIIEELL besser wäre aber: String,validieren auf korrekteXMLSyntax,
fertig?!
Kennt vielleicht jemand so ne geschickte Variante oder habe ich irgendwelche
Konstruktoren übersehen??Antworten wären cool!
Danke
-
Hallo,
mit JDom kenn ich mich nicht so gut aus aber in einer Datei zwischenspeichern musst du das Ganze sicherlich nicht. Hab grade nicht besonders viel Zeit, deshalb poste ich hier nur mal nur ein Beispiel, wie man das mit DOM und JAXP machen kann:
String xmlString = "<test1><test2>Inhalt</test2></test1>"; ByteArrayInputStream bais = new ByteArrayInputStream( xmlString .getBytes() ); // ab hier wieder das übliche DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating( true ); // usw. DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse( bais );
entscheidend ist also die Zeile
ByteArrayInputStream bais = new ByteArrayInputStream( xmlString .getBytes() );
ich nutze dann folgende Methode zum parsen:
parse(InputStream is)
Wenn JDom also zum Parsen eine Methode für einen InputStream anbietet kannst du es ja dementsprechend umändern.
Vielleicht hilft dir das jetzt schon mal weiter, muss jetzt leider zum zahnarzt...
MfG
-
Erstmal herzlichen Dank für Deine Antwort.
Werde gleich mal ein wenig weiterprogrammieren (so komme ich kurzfristig um Mathe herum und werde mich dann mal in die Richtung orientieren.
Hoffe Zahnarzt war nicht zu schlimm :D!Falls ich gar nicht weiterkomme in die Richtung melde ich mich nochmal
-
Hi, ich bins nochmal.
Also erstmal nochmals vielen Dank für den Tipp, (habe ihn erst jetzt richtig gelesen und verstanden).
Und deswegen habe ich mal eine Frage, WIE, bzw. woher kennt man solche Funktionen? (ByteArrayInputStram)??
Ich meine, ich habe ja einige Bücher und Internet ist auch toll und so, aber wie lernt man solche "sonderlichen" Funktionen kennen?
Also, ochmals Danke!
-
Naja, die Klasse ByteArrayInputStream kenne ich zum Beispiel aus dem "Handbuch der Javaprogrammierung" (www.javabuch.de). Es ist aber nicht nötig, "sonderliche" Klassen bzw. Funktionen aus dem Stand zu kennen, dafür gibt's ja die API Docs.
In diesem Fall brauchst du dir nur anzusehen welche Methoden es zum Parsen eines XML-Dokuments gibt und welche Parameter diese übernehmen. Dabei kommst du auf die Methode parse(InputStream is). Nun bleibt noch die Frage wie man von einem String zu einem InputStream kommt, also schau ich mir die Konstruktoren etc. der Klasse InputStream an. Ist da nichts dabei, dann die abgeleiteten Klassen von InputStream usw. Ich tu mich dabei leichter wenn ich mir in den Docs nur das jeweilige Package (also hier java.io) anschaue. Dann stösst man auf die Unterklasse ByteArrayInputStream, welche ein Byte-Array als Konstruktor-Parameter erwartet. Das bekommt von einem String durch die Methode getBytes().
Also im Endeffekt nur einfaches API-VerwendenMfG