Java XML Document to String toString(Document document)

Here you can find the source of toString(Document document)

Description

to String

License

Open Source License

Declaration

public static String toString(Document document) 

Method Source Code

//package com.java2s;
/*******************************************************************************
 * Copyright (c) 2003, 2010 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors://from w  w w  .  j a  v  a2  s . c om
 *     IBM Corporation - Initial API and implementation
 *     Angelo Zerr <angelo.zerr@gmail.com> - Jetty packages
 *******************************************************************************/

import java.io.ByteArrayOutputStream;

import java.io.PrintStream;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class Main {
    public static String toString(Document document) {
        PrintStream out = null;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
            out = new PrintStream(baos);
            print(out, document);
            return new String(baos.toByteArray(), "UTF-8");
        } catch (Exception ex) {
            // ignore
        } finally {
            if (out != null)
                try {
                    out.close();
                } catch (Exception e) {
                    // ignore
                }
        }
        return null;
    }

    protected static void print(PrintStream out, Node node) {
        if (node == null)
            return;
        short type = node.getNodeType();
        switch (type) {
        case Node.DOCUMENT_NODE: {
            out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            // out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
            NodeList nodelist = node.getChildNodes();
            int size = nodelist.getLength();
            for (int i = 0; i < size; i++)
                print(out, nodelist.item(i));
            break;
        }

        case Node.DOCUMENT_TYPE_NODE: {
            DocumentType docType = (DocumentType) node;
            out.print("<!DOCTYPE " + getDocumentTypeData(docType) + ">\n");
            break;
        }

        case Node.ELEMENT_NODE: {
            out.print('<');
            out.print(node.getNodeName());
            NamedNodeMap map = node.getAttributes();
            if (map != null) {
                int size = map.getLength();
                for (int i = 0; i < size; i++) {
                    Attr attr = (Attr) map.item(i);
                    out.print(' ');
                    out.print(attr.getNodeName());
                    out.print("=\"");
                    out.print(normalize(attr.getNodeValue()));
                    out.print('"');
                }
            }

            if (!node.hasChildNodes())
                out.print("/>");
            else {
                out.print('>');
                NodeList nodelist = node.getChildNodes();
                int numChildren = nodelist.getLength();
                for (int i = 0; i < numChildren; i++)
                    print(out, nodelist.item(i));

                out.print("</");
                out.print(node.getNodeName());
                out.print('>');
            }
            break;
        }

        case Node.ENTITY_REFERENCE_NODE: {
            NodeList nodelist = node.getChildNodes();
            if (nodelist != null) {
                int size = nodelist.getLength();
                for (int i = 0; i < size; i++)
                    print(out, nodelist.item(i));

            }
            break;
        }

        case Node.CDATA_SECTION_NODE: {
            out.print(normalize(node.getNodeValue()));
            break;
        }

        case Node.TEXT_NODE: {
            out.print(normalize(node.getNodeValue()));
            break;
        }

        case Node.PROCESSING_INSTRUCTION_NODE: {
            out.print("<?");
            out.print(node.getNodeName());
            String s = node.getNodeValue();
            if (s != null && s.length() > 0) {
                out.print(' ');
                out.print(s);
            }
            out.print("?>");
            break;
        }

        case Node.COMMENT_NODE: {
            out.print("<!--");
            out.print(node.getNodeValue());
            out.print("-->");
            break;
        }

        default: {
            out.print(normalize(node.getNodeValue()));
            break;
        }
        }
        out.flush();
    }

    protected static String getDocumentTypeData(DocumentType doctype) {
        String data = doctype.getName();
        if (doctype.getPublicId() != null) {
            data += " PUBLIC \"" + doctype.getPublicId() + "\"";
            String systemId = doctype.getSystemId();
            if (systemId == null)
                systemId = "";
            data += " \"" + systemId + "\"";
        } else
            data += " SYSTEM \"" + doctype.getSystemId() + "\"";

        return data;
    }

    protected static String normalize(String s) {
        StringBuffer stringbuffer = new StringBuffer();
        int i = s == null ? 0 : s.length();
        for (int j = 0; j < i; j++) {
            char c = s.charAt(j);
            switch (c) {
            case 60: /* '<' */
                stringbuffer.append("&lt;");
                break;

            case 62: /* '>' */
                stringbuffer.append("&gt;");
                break;

            case 38: /* '&' */
                stringbuffer.append("&amp;");
                break;

            case 34: /* '"' */
                stringbuffer.append("&quot;");
                break;

            case 10: /* '\n' */
            case 13: /* '\r' */
            default:
                stringbuffer.append(c);
                break;

            }
        }

        return stringbuffer.toString();
    }

    /**
     * Get the value of this node. Will return "" instead of null.
     * 
     * @return java.lang.String
     * @param node
     *            org.w3c.dom.Node
     */
    public static String getNodeValue(Node node) {
        NodeList nodeList = node.getChildNodes();

        int length = nodeList.getLength();
        for (int i = 0; i < length; i++) {
            Node n = nodeList.item(i);
            if (n instanceof Text) {
                Text t = (Text) n;
                return t.getNodeValue();
            }
        }
        return "";
    }
}

Related

  1. toString(Document doc)
  2. toString(Document doc)
  3. toString(Document doc)
  4. toString(Document doc, String encoding, boolean indent)
  5. toString(Document document)
  6. toString(Document document)
  7. toString(Document document)
  8. toString(Document document)
  9. toString(final Document document)