Description
Parse string as XML document and return string with reformatted document.
License
Apache License
Parameter
Parameter | Description |
---|
xml | string with XML content |
Exception
Parameter | Description |
---|
TransformerException | if it is not possible to transform document to string |
SAXException | if any parse errors occur |
Return
reformatted content
Declaration
public static String format(final String xml) throws TransformerException, SAXException
Method Source Code
//package com.java2s;
/*/* ww w . j a v a2 s.c o m*/
* 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.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;
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();
}
};
/** DocumentBuilderFactory. */
private static final ThreadLocal<DocumentBuilderFactory> DOC_FACTORY = new ThreadLocal<DocumentBuilderFactory>() {
@Override
protected DocumentBuilderFactory initialValue() {
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
dbf.setIgnoringElementContentWhitespace(true);
return dbf;
}
};
/**
* Parse string as XML document and return string with reformatted document.
*
* @param xml
* string with XML content
* @return reformatted content
* @throws TransformerException
* if it is not possible to transform document to string
* @throws SAXException
* if any parse errors occur
*/
public static String format(final String xml) throws TransformerException, SAXException {
return toString(getXMLDocument(xml));
}
/**
* 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();
}
/**
* Parse string with XML content to {@link org.w3c.dom.Document}.
*
* @param xml
* string with XML content
* @return Document
* @throws SAXException
* if any parse errors occur
*/
public static Document getXMLDocument(final String xml) throws SAXException {
try {
return getNewDocumentBuilder().parse(new InputSource(new StringReader(xml)));
} catch (IOException e) {
throw new SAXException(e);
} catch (ParserConfigurationException e) {
throw new SAXException(e);
}
}
/**
* @return DocumentBuilder
* @throws ParserConfigurationException
* if a DocumentBuilder cannot be created which satisfies the configuration
* requested
*/
private static DocumentBuilder getNewDocumentBuilder() throws ParserConfigurationException {
return DOC_FACTORY.get().newDocumentBuilder();
}
}
Related
- applyTransformation(InputStream xsltStream, Map xsltParameters, InputStream inputXmlStream, OutputStream outputStream)
- format(Node node)
- format(Node node, String indent)
- format(String unformattedXml)
- formatAttributes(Node node)