Hallo, habe eine kleine Anwendung in der ich FileInput/OutputStreams nutze. Nun möchte ich aber anstatt der Files mit Strings arbeiten. Der zu verarbeitende Text soll somit in einem String stehen und nicht in einer Datei. Genauso andersrum soll es in den String zurückgeschrieben werden.
Code:
import org.apache.xerces.jaxp.DocumentBuilderFactoryImpl;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.OutputFormat;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class XmlFormatterExample {
public static void serialize(Document doc, OutputStream out) throws Exception {
OutputFormat format = new OutputFormat(doc);
format.setLineWidth(40); // Umbruch bei 40 Zeichen
//format.setIndenting(true); Achtung: darf NICHT gesetzt sein, sonst KEIN Zeilenumbruch
format.setIndent(4);
XMLSerializer serializer = new XMLSerializer(out, format);
serializer.serialize(doc);
}
public static void main(String argv[]) {
FileInputStream fis = null;
try {
String filenameInput = "c:\\temp\\xml\\1.xml"; // das ist Eure Beispieldatei
String filenameOutput = "c:\\temp\\xml\\1_output.xml";
fis = new FileInputStream(filenameInput);
DocumentBuilderFactoryImpl factory = new DocumentBuilderFactoryImpl();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource( fis ));
FileOutputStream fos = new FileOutputStream(filenameOutput);
serialize(doc, fos);
} catch(Exception e) {
System.out.println("Error!" + e);
} finally {
if(fis != null) try { fis.close(); } catch(Exception e) { /* ignore */ }
}
}
}
Leider weiß ich nun nicht, wie ich aus den Streams einfach einen String mache.
Man kann bei den ganzen XML Libs nicht nur mit In- und OutputStreams arbeiten sondern auch mit Readern und Writern. Die Klassen StringReader und StringWriter sind dann der Ansatz um den XML-Content wenn benoetig in Strings zu schreiben bzw aus Strings zu lesen.
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintStream printstream = new PrintStream(outputStream);
//Dann den Stream füllen
printstream.print("Das Leben ist eines der Schönsten!");
//Dann wieder in einem "Result-String" speichern
String resultString = new String(outputStream.toByteArray());