# string in ein xml-object umwandeln



## mr.freeze (19. Aug 2010)

Hallo, 
ich habe folgenden code:

```
URLConnection connection = null;
		try {
			connection = new URL("http://server/bla/auth?user=bla&password=123").openConnection();
			BufferedReader reader = null;
			reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			
//			Object myContent = connection.getContent();
//			System.out.println("Datentyp: " + myContent.getClass());
//			System.out.println("ContentType: " + connection.getContentType());
	
			String content = "";
			String line;
			while ((line = reader.readLine()) != null) {
			    System.out.println(line);
			    content += line;
			}
			System.out.println("Mein Inhalt: " + content);
			
		
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
```

gibt es eine möglichkeit aus einem string ein xml-object zu generieren.
ich bekomme eine xml-datei zurück, welche möglichkeit habe ich denn
noch um den content gleich als xml-object zu speichern?

gruß


----------



## KrokoDiehl (19. Aug 2010)

Das müsste etwa wie folgt gehen:

```
String xmlAlsString = ...;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document xmlDoc = db.parse(new InputSource(new StringReader(xmlAlsString)));
```

Ggfs. kannst du aber auch überlegen, das XML-Document direkt zu schicken?


----------



## mr.freeze (19. Aug 2010)

es wird ja ein xml-dokument zurückgeschickt.
weiß aber leider nicht, wie ich es auffangen kann.
und ohne den streamreader machen kann.
gruß


----------



## SlaterB (19. Aug 2010)

KrokoDiehl hat doch Code gepostet, hilft das? ist noch eine Frage offen?
möglichst immer klare Postings schreiben


----------



## mr.freeze (20. Aug 2010)

ich habe folgenden code 

```
private static String getContent(URLConnection pConnection, BufferedReader pReader) throws IOException
{
	pReader = new BufferedReader(new InputStreamReader(pConnection.getInputStream()));
	String content = "";
	String line;
	while ((line = pReader.readLine()) != null) {
	    //System.out.println(line);
	    content += line;
	}
	
	return content;
}

//In xml umwandeln
String xmlAlsString = getContent(pConnection, pReader);
String myFile = "/home/user/Develop/loginResponse.xml";
File fpOutput = new File(myFile);
FileWriter fw = new FileWriter(fpOutput);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(xmlAlsString);
	
// schließen der Ressourcen
bw.close();
fw.close();
```

wenn ich die url aufrufe bekomme ich ja 
normalerweise ein xml-dokument zurück.
welche möglichkeit habe ich denn das xml-doc
direkt aufzufangen?  ohne pReader = new BufferedReader(new InputStreamReader(pConnection.getInputStream()));

nach dem motto -> seite aufrufen -> response in ein xml-dokument speichern
gibt es da einen direkten weg?

gruß


----------



## sylo (20. Aug 2010)

Hi

könntest du deine Frage nochmal anderster Stellen? Verstehe nicht ganz was du meinst.
Willst du einen String in ein XML-Dokument oder eine XML-Datei schreiben?

Wenn du in ein Dokument schreiben willst, siehe Post von Krokodiehl

Wenn in eine Datei dann könntest du es z.b. nachdem du es in ein Dokument geschrieben hast damit in eine Datei schreiben

```
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();

t.transform(new DOMSource(document), new StreamResult(new OutputStreamWriter(
                        new FileOutputStream(file))));
```

Grüße
sylo


----------



## SlaterB (20. Aug 2010)

aus dem Stream wird normalerweise nur Text kommen, den du in irgendwas umwandeln musst,
so ist das Leben, diese Zeile kannst du eher nicht sparen

'direkt aufzufangen' ist da nicht ganz das Problem, eher dass nicht 'direkt gesendet' wird, sondern nur ein Textdarstellung


----------



## bygones (20. Aug 2010)

KrokoDiehl hat gesagt.:


> Das müsste etwa wie folgt gehen:
> 
> ```
> String xmlAlsString = ...;
> ...


lol.... mal wieder der beweis wie schlecht man APIs machen kann.... 

gibt es echt keinen besseren weg aus einem String ein Document zu machen ? oh man 6 Klassen dafür....

sry wahr. offtopic


----------



## Noctarius (20. Aug 2010)

bygones hat gesagt.:


> lol.... mal wieder der beweis wie schlecht man APIs machen kann....
> 
> gibt es echt keinen besseren weg aus einem String ein Document zu machen ? oh man 6 Klassen dafür....
> 
> sry wahr. offtopic



Doch StringInputStream


----------



## bygones (20. Aug 2010)

Noctarius hat gesagt.:


> Doch StringInputStream


ich glaube dennoch nicht, dass man damit dann sowas schafft wie es sein sollte

```
Document doc = Document.readFromString(xmlString);
```


----------



## Noctarius (20. Aug 2010)

Tja  Nö geht nicht ^^

Das liegt aber daran, wie im JRE die Implementierungen der Document und DocumentFactory, ... gesucht und instanziert werden (auch wenn ich jetzt nicht sagen will, dass der Weg schön ist)


----------



## SlaterB (20. Aug 2010)

ist doch völlig egal welcher Code dafü nötig ist, intern werden letzlich hunderte Klasse angesprochen,
einfach alles in eine statische Methode und die dann genau wie gewünscht 
> Document doc = Document.readFromString(xmlString);
aufrufen

genauso sehe das mit Checked Exceptions, 
da jede komplizierte API-Anbindung in eine einzelne separate Stelle verbannt wird ist es ganz egal was man dort machen muss,
im Hauptprogramm hat man die kürzestmöglichen sauberen Aufrufe


----------

