Java tutorial
//package com.java2s; /* * Copyright 2007-2012 AjaxTags-Team * * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ import java.io.StringWriter; 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; public class Main { /** Value for transformer output properties. */ private static final String TRANSFORMER_YES = "yes"; /** TransformerFactory. */ private static final ThreadLocal<TransformerFactory> TRANSFORMER_FACTORY = new ThreadLocal<TransformerFactory>() { @Override protected TransformerFactory initialValue() { return TransformerFactory.newInstance(); } }; /** * Transform document to string representation. * * @param document * XHTML document * @return string representation of document * @throws TransformerException * if it is not possible to create a Transformer instance or to transform document */ public static String toString(final Document document) throws TransformerException { final StringWriter stringWriter = new StringWriter(); final StreamResult streamResult = new StreamResult(stringWriter); final Transformer transformer = TRANSFORMER_FACTORY.get().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, TRANSFORMER_YES); // set indent for XML transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2"); // not all JavaSE have the same implementation transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); // transformer.setOutputProperty(OutputKeys.METHOD, "html"); // html method transforms <br/> into <br>, which cannot be re-parsed // transformer.setOutputProperty(OutputKeys.METHOD, "xhtml"); // xhtml method does not work for my xalan transformer transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, TRANSFORMER_YES); transformer.transform(new DOMSource(document.getDocumentElement()), streamResult); return stringWriter.toString(); } }