Java XML Node Serialize serializeNode(Node node)

Here you can find the source of serializeNode(Node node)

Description

serialize Node

License

Open Source License

Parameter

Parameter Description
node a parameter

Exception

Parameter Description
IOException an exception

Declaration

public static void serializeNode(Node node) throws IOException 

Method Source Code


//package com.java2s;
/* $This file is distributed under the terms of the license in /doc/license.txt$ */

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.Writer;

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;

public class Main {
    public static Writer writer;

    /**// ww w  .  j a va 2  s  . c o  m
    * @param node
    * @throws IOException
    */
    public static void serializeNode(Node node) throws IOException {
        if (writer == null)
            writer = new BufferedWriter(new OutputStreamWriter(System.out));

        switch (node.getNodeType()) {
        case Node.DOCUMENT_NODE:
            Document doc = (Document) node;
            writer.write("<?xml version=\"");
            writer.write(doc.getXmlVersion());
            writer.write("\" encoding=\"UTF-8\" standalone=\"");
            if (doc.getXmlStandalone())
                writer.write("yes");
            else
                writer.write("no");
            writer.write("\"?>\n");

            NodeList nodes = node.getChildNodes();
            if (nodes != null)
                for (int i = 0; i < nodes.getLength(); i++)
                    serializeNode(nodes.item(i));
            break;
        case Node.ELEMENT_NODE:
            String name = node.getNodeName();
            writer.write("<" + name);
            NamedNodeMap attributes = node.getAttributes();
            for (int i = 0; i < attributes.getLength(); i++) {
                Node current = attributes.item(i);
                writer.write(" " + current.getNodeName() + "=\"");
                print(current.getNodeValue());
                writer.write("\"");
            }
            writer.write(">");

            NodeList children = node.getChildNodes();
            if (children != null) {
                //if ((children.item(0) != null) && (children.item(0).getNodeType() == Node.ELEMENT_NODE))
                //  writer.write("\n");

                for (int i = 0; i < children.getLength(); i++)
                    serializeNode(children.item(i));
                if ((children.item(0) != null)
                        && (children.item(children.getLength() - 1).getNodeType() == Node.ELEMENT_NODE))
                    writer.write("");
            }

            writer.write("</" + name + ">");
            break;
        case Node.TEXT_NODE:
            print(node.getNodeValue());
            break;
        case Node.CDATA_SECTION_NODE:
            writer.write("CDATA");
            print(node.getNodeValue());
            writer.write("");
            break;
        case Node.COMMENT_NODE:
            writer.write("<!-- " + node.getNodeValue() + " -->\n");
            break;
        case Node.PROCESSING_INSTRUCTION_NODE:
            writer.write("<?" + node.getNodeName() + " " + node.getNodeValue() + "?>\n");
            break;
        case Node.ENTITY_REFERENCE_NODE:
            writer.write("&" + node.getNodeName() + ";");
            break;
        case Node.DOCUMENT_TYPE_NODE:
            DocumentType docType = (DocumentType) node;
            String publicId = docType.getPublicId();
            String systemId = docType.getSystemId();
            String internalSubset = docType.getInternalSubset();
            writer.write("<!DOCTYPE " + docType.getName());
            if (publicId != null)
                writer.write(" PUBLIC \"" + publicId + "\" ");
            else
                writer.write(" SYSTEM ");
            writer.write("\"" + systemId + "\"");
            if (internalSubset != null)
                writer.write(" [" + internalSubset + "]");
            writer.write(">\n");
            break;
        }
        writer.flush();
    }

    /**
    * @param s
    * @throws IOException
    */
    private static void print(String s) throws IOException {
        if (s == null)
            return;
        for (int i = 0, len = s.length(); i < len; i++) {
            char c = s.charAt(i);
            switch (c) {
            case '<':
                writer.write("&lt;");
                break;
            case '>':
                writer.write("&gt;");
                break;
            case '&':
                writer.write("&amp;");
                break;
            case '\r':
                writer.write("&#xD;");
                break;
            default:
                writer.write(c);
            }
        }
    }
}

Related

  1. serializeDom(Node node, StringBuffer writeString)
  2. serializeElement(Element element)
  3. serializeElement(Element element, boolean omitXmlDeclaration, boolean indent, String method)
  4. serializeNode(Node node)
  5. serializeNode(Node node)
  6. serializeNode(Node node)
  7. serializeNode(Node node)
  8. serializeNode(Node node, String filename)
  9. serializeNode(Node node, String indentLevel, StringWriter writer)