Java tutorial
//package com.java2s; /* ************************************************************************** * * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. * * This file is licensed to you 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.Reader; import java.io.Writer; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.URIResolver; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; public class Main { public static Document formatXML(Document xml, Document xsl) throws Exception { TransformerFactory factory = TransformerFactory.newInstance(); DOMSource xslSource = new DOMSource(xsl); Templates t = factory.newTemplates(xslSource); Transformer transformer = t.newTransformer(); return formatXML(xml, transformer); } public static void formatXML(Document doc, Document xsl, Writer writer) throws Exception { DOMSource xmlSource = new DOMSource(doc); DOMSource xslSource = new DOMSource(xsl); formatXML(xmlSource, xslSource, writer); writer.flush(); } public static void formatXML(Document doc, Reader xslStream, Writer writer) throws Exception { DOMSource xmlSource = new DOMSource(doc); StreamSource xslSource = new StreamSource(xslStream); formatXML(xmlSource, xslSource, writer); writer.flush(); } public static Document formatXML(Document xml, Transformer transformer) throws Exception { DOMSource xmlSource = new DOMSource(xml); Document resultDoc = newDocument(); DOMResult result = new DOMResult(resultDoc); transformer.transform(xmlSource, result); return resultDoc; } public static Document formatXML(Document xml, URIResolver resolver, Document xsl) throws Exception { DOMSource xslSource = new DOMSource(xsl); return format(xslSource, xml, resolver); } public static void formatXML(Document xml, URIResolver resolver, Document xsl, Writer output) throws Exception { StreamResult result = new StreamResult(output); DOMSource xslSource = new DOMSource(xsl); TransformerFactory factory = TransformerFactory.newInstance(); DOMSource xmlSource = new DOMSource(xml); Templates t = factory.newTemplates(xslSource); Transformer transformer = t.newTransformer(); transformer.setURIResolver(resolver); transformer.transform(xmlSource, result); } public static Document formatXML(Document xml, URIResolver resolver, String... xsls) throws Exception { TransformerFactory factory = TransformerFactory.newInstance(); for (String xsl : xsls) { DOMSource xmlSource = new DOMSource(xml); Source xslSource = resolver.resolve(xsl, ""); Templates t = factory.newTemplates(xslSource); Transformer transformer = t.newTransformer(); transformer.setURIResolver(resolver); Document resultDoc = newDocument(); DOMResult result = new DOMResult(resultDoc); transformer.transform(xmlSource, result); xml = resultDoc; } return xml; } private static void formatXML(Source xmlSource, Source xslSource, Writer output) throws Exception { TransformerFactory factory = TransformerFactory.newInstance(); Templates t = factory.newTemplates(xslSource); Transformer transformer = t.newTransformer(); StreamResult result = new StreamResult(output); transformer.transform(xmlSource, result); } /** * Creates and returns a new empty DOM document. * * @return a newly created DOM document * @throws ParserConfigurationException */ public static Document newDocument() throws Exception { DocumentBuilder builder = getDocumentBuilder(true); return builder.newDocument(); } public static Document format(Source xslSource, Document xml, URIResolver resolver) throws TransformerFactoryConfigurationError, TransformerConfigurationException, Exception, TransformerException { TransformerFactory factory = TransformerFactory.newInstance(); DOMSource xmlSource = new DOMSource(xml); Templates t = factory.newTemplates(xslSource); Transformer transformer = t.newTransformer(); transformer.setURIResolver(resolver); Document resultDoc = newDocument(); DOMResult result = new DOMResult(resultDoc); transformer.transform(xmlSource, result); return resultDoc; } /** * Creates and returns an new document builder factory. This method tries to * configure the namespace support for the builder. If the underlying parser * does not support namespaces then this method returns a simple * DocumentBuilder object. * * @return a new document builder * @throws ParserConfigurationException */ private static DocumentBuilder getDocumentBuilder(boolean isNamespaceAware) throws ParserConfigurationException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(isNamespaceAware); // never forget this! try { factory.setFeature("http://xml.org/sax/features/namespaces", isNamespaceAware); } catch (Throwable t) { // Just skip it... } DocumentBuilder builder = factory.newDocumentBuilder(); return builder; } }