Java XML Node Format print(PrintStream out, Node node)

Here you can find the source of print(PrintStream out, Node node)

Description

print

License

Open Source License

Declaration

protected static void print(PrintStream out, Node node) 

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 av  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 {
    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 "";
    }

    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;
    }
}

Related

  1. formatNode(Node node, int indent, StringBuffer stringBuffer)
  2. printNode(StringBuffer sBuffer, Node node)
  3. printTree(Writer ps, Node node, String indent, String lineSeparator)
  4. renderNode(StringBuffer sb, Node node)
  5. renderNode(StringBuffer sb, Node node, String margin, String indent, String lab, String rab, String nl)