Java XML Document to String documentToString(Document document, boolean standalone)

Here you can find the source of documentToString(Document document, boolean standalone)

Description

document To String

License

LGPL

Declaration

public static String documentToString(Document document,
            boolean standalone) throws Exception 

Method Source Code

//package com.java2s;
/*/*from  w ww.j a  v  a2  s.  c  o  m*/
 * Copyright (C) 2013 4th Line GmbH, Switzerland
 *
 * The contents of this file are subject to the terms of either the GNU
 * Lesser General Public License Version 2 or later ("LGPL") or the
 * Common Development and Distribution License Version 1 or later
 * ("CDDL") (collectively, the "License"). You may not use this file
 * except in compliance with the License. See LICENSE.txt for more
 * information.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

import org.w3c.dom.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Main {
    public static String documentToString(Document document)
            throws Exception {
        return documentToString(document, true);
    }

    public static String documentToString(Document document,
            boolean standalone) throws Exception {
        String prol = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\""
                + (standalone ? "yes" : "no") + "\"?>";
        return prol
                + nodeToString(document.getDocumentElement(),
                        new HashSet(), document.getDocumentElement()
                                .getNamespaceURI());
    }

    protected static String nodeToString(Node node,
            Set<String> parentPrefixes, String namespaceURI)
            throws Exception {
        StringBuilder b = new StringBuilder();

        if (node == null) {
            return "";
        }

        if (node instanceof Element) {
            Element element = (Element) node;
            b.append("<");
            b.append(element.getNodeName());

            Map<String, String> thisLevelPrefixes = new HashMap();
            if (element.getPrefix() != null
                    && !parentPrefixes.contains(element.getPrefix())) {
                thisLevelPrefixes.put(element.getPrefix(),
                        element.getNamespaceURI());
            }

            if (element.hasAttributes()) {
                NamedNodeMap map = element.getAttributes();
                for (int i = 0; i < map.getLength(); i++) {
                    Node attr = map.item(i);
                    if (attr.getNodeName().startsWith("xmlns"))
                        continue;
                    if (attr.getPrefix() != null
                            && !parentPrefixes.contains(attr.getPrefix())) {
                        thisLevelPrefixes.put(attr.getPrefix(),
                                element.getNamespaceURI());
                    }
                    b.append(" ");
                    b.append(attr.getNodeName());
                    b.append("=\"");
                    b.append(attr.getNodeValue());
                    b.append("\"");
                }
            }

            if (namespaceURI != null
                    && !thisLevelPrefixes.containsValue(namespaceURI)
                    && !namespaceURI.equals(element.getParentNode()
                            .getNamespaceURI())) {
                b.append(" xmlns=\"").append(namespaceURI).append("\"");
            }

            for (Map.Entry<String, String> entry : thisLevelPrefixes
                    .entrySet()) {
                b.append(" xmlns:").append(entry.getKey()).append("=\"")
                        .append(entry.getValue()).append("\"");
                parentPrefixes.add(entry.getKey());
            }

            NodeList children = element.getChildNodes();
            boolean hasOnlyAttributes = true;
            for (int i = 0; i < children.getLength(); i++) {
                Node child = children.item(i);
                if (child.getNodeType() != Node.ATTRIBUTE_NODE) {
                    hasOnlyAttributes = false;
                    break;
                }
            }
            if (!hasOnlyAttributes) {
                b.append(">");
                for (int i = 0; i < children.getLength(); i++) {
                    b.append(nodeToString(children.item(i), parentPrefixes,
                            children.item(i).getNamespaceURI()));
                }
                b.append("</");
                b.append(element.getNodeName());
                b.append(">");
            } else {
                b.append("/>");
            }

            for (String thisLevelPrefix : thisLevelPrefixes.keySet()) {
                parentPrefixes.remove(thisLevelPrefix);
            }

        } else if (node.getNodeValue() != null) {
            b.append(encodeText(node.getNodeValue(), node instanceof Attr));
        }

        return b.toString();
    }

    public static String encodeText(String s) {
        return encodeText(s, true);
    }

    public static String encodeText(String s, boolean encodeQuotes) {
        s = s.replaceAll("&", "&amp;");
        s = s.replaceAll("<", "&lt;");
        s = s.replaceAll(">", "&gt;");
        if (encodeQuotes) {
            s = s.replaceAll("'", "&apos;");
            s = s.replaceAll("\"", "&quot;");
        }
        return s;
    }
}

Related

  1. documentToString(Document document)
  2. documentToString(Document document)
  3. documentToString(Document document)
  4. documentToString(Document document)
  5. documentToString(Document document, boolean pretty)
  6. documentToString(Document document, Transformer documentTransformer)
  7. DocumentToString(Document dom)
  8. documentToString(final Node node)
  9. documentToString(Node document)