Executes a XML identity transform. - Java XML

Java examples for XML:XML Transform

Description

Executes a XML identity transform.

Demo Code

/* See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * Esri Inc. licenses this file 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./*w ww  .j a  va 2s . c  om*/
 */
//package com.java2s;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Main {


    /** DEFAULT_ENCODING = "UTF-8" */
    public static final String DEFAULT_ENCODING = "UTF-8";
    /** DEFAULT_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" */
    public static final String DEFAULT_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

    /**
     * Executes an identity transform.
     * @param xml the xml
     * @throws TransformerException if an exception occurs
     */
    public static String identity(String xml) throws TransformerException {
        xml = removeBOM(xml);
        if (xml != null)
            xml = xml.trim();
        if ((xml == null) || (xml.length() == 0)) {
            throw new TransformerException("Empty XML.");
        }
        StringWriter result = new StringWriter();
        transform(new StreamSource(new StringReader(xml)),
                new StreamResult(result), false);
        return checkResult(result, false);
    }

    /**
     * Removes a windows byte order mark if present.
     * @param s the string to check
     * @return the string absent the byte order mark
     */
    public static String removeBOM(String s) {
        if (s != null) {
            byte[] bom = new byte[3];
            bom[0] = (byte) 0xEF;
            bom[1] = (byte) 0xBB;
            bom[2] = (byte) 0xBF;
            try {
                String sbom = new String(bom, "UTF-8");
                s = s.trim();
                if (s.startsWith(sbom)) {
                    s = s.substring(1).trim();
                }
            } catch (UnsupportedEncodingException e) {
            }
        }
        return s;
    }

    /**
     * Executes a transformation.
     * <br>The output encoding is set to UTF-8
     * @param source the transformation source
     * @param result the transformation result
     * @param indent if true, the output indent key is set to "yes"
     * @throws TransformerException if an exception occurs
     */
    public static void transform(javax.xml.transform.Source source,
            javax.xml.transform.Result result, boolean indent)
            throws TransformerException {
        Transformer transformer = TransformerFactory.newInstance()
                .newTransformer();
        transformer
                .setOutputProperty(OutputKeys.ENCODING, DEFAULT_ENCODING);
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
        if (indent) {
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(
                    "{http://xml.apache.org/xslt}indent-amount", "2");
        }
        transformer.transform(source, result);
    }

    /**
     * Check a result.
     * @param result the result
     * @return the string (trimmed, null if empty)
     */
    public static String checkResult(StringWriter result,
            boolean checkIndent) {
        String s = result.toString();
        if (s != null) {
            s = s.trim();
            if (checkIndent) {
                if (s.startsWith(DEFAULT_HEADER + "<")) {
                    s = s.replace(DEFAULT_HEADER, DEFAULT_HEADER + "\r\n");
                }
            }
            if (s.length() == 0)
                s = null;
        }
        ;
        return s;
    }
}

Related Tutorials