Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

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

    /**
     * @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);
            }
        }
    }
}