XML parsen und wieder in String konvertieren
XML wird in Java meist über DOM oder SAX bearbeitet. Im Falle von DOM wird ein Baum aufgebaut, der die Struktur und die Inhalte des XML Dokuments wiedergibt. Wie kommt man aber von einem XML String zu einem DOM Baum und vom DOM Baum wieder zurück zu einem String? Dafür habe ich ein kleines Helferlein programmiert…
import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * Utilities for parsing and converting XML DOMs. */ public class XMLUtilities { /** * Parse a string containing XML. * * @param xmlString the XML string * @return XML DOM document * @throws ParserConfigurationException * @throws SAXException * @throws IOException */ public static Document parse(String xmlString) throws ParserConfigurationException, SAXException, IOException { // define inputs StringReader stringReader = new StringReader(xmlString); InputSource inputSource = new InputSource(stringReader); // parse inputs DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(inputSource); return document; } /** * Convert XML DOM document to a string. * * @param document XML DOM document * @return XML string * @throws TransformerException */ public static String toString(Document document) throws TransformerException { StringWriter stringWriter = new StringWriter(); StreamResult streamResult = new StreamResult(stringWriter); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.transform(new DOMSource(document.getDocumentElement()), streamResult); return stringWriter.toString(); } }