Java XML Node Save save(String filename, Node node)

Here you can find the source of save(String filename, Node node)

Description

save

License

Open Source License

Declaration

public static void save(String filename, Node node) throws IOException 

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  ava 2s  . co m*/
 *     IBM Corporation - Initial API and implementation
 *     Angelo Zerr <angelo.zerr@gmail.com> - Jetty packages
 *******************************************************************************/

import java.io.BufferedOutputStream;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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 void save(String filename, Document document)
            throws IOException {
        PrintStream out = null;
        try {
            out = new PrintStream(new BufferedOutputStream(
                    new FileOutputStream(filename)), true, "UTF-8");
            // traceNode(document, "");
            print(out, document);
        } catch (Exception ex) {
            throw new IOException(ex.getLocalizedMessage());
        } finally {
            if (out != null)
                try {
                    out.close();
                } catch (Exception e) {
                    // ignore
                }
        }
    }

    public static void save(String filename, Node node) throws IOException {
        PrintStream out = null;
        try {
            out = new PrintStream(new BufferedOutputStream(
                    new FileOutputStream(filename)), true, "UTF-8");
            print(out, node);
        } catch (Exception ex) {
            throw new IOException(ex.getLocalizedMessage());
        } finally {
            if (out != null)
                try {
                    out.close();
                } catch (Exception e) {
                    // ignore
                }
        }
    }

    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. toResultSet(Node node, ResultSet rs)
  2. write(Node node, Writer out)
  3. writeByDom(Node node, Writer writer, int indent)
  4. writeDescription(PrintWriter out, Node node, String offSet)