Java XML Node Serialize serializeDom(Node node, StringBuffer writeString)

Here you can find the source of serializeDom(Node node, StringBuffer writeString)

Description

Serializes the DOM-tree to a stringBuffer.

License

Open Source License

Parameter

Parameter Description
node Node to start examining the tree from.
writeString The StringBuffer you want to fill with xml.

Return

The StringBuffer containing the xml.

Declaration


public static StringBuffer serializeDom(Node node, StringBuffer writeString) 

Method Source Code

//package com.java2s;
/* ===============================================================================
 *
 * Part of the InfoGlue Content Management Platform (www.infoglue.org)
 *
 * ===============================================================================
 *
 *  Copyright (C)/*www .j a v a 2  s.  c  o  m*/
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License version 2, as published by the
 * Free Software Foundation. See the file LICENSE.html for more information.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
 * Place, Suite 330 / Boston, MA 02111-1307 / USA.
 *
 * ===============================================================================
 */

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

public class Main {
    /**
     * Serializes the DOM-tree to a stringBuffer. Recursive method!
     *
     * @param node Node to start examining the tree from.
     * @param writeString The StringBuffer you want to fill with xml.
     * @return The StringBuffer containing the xml.
     * 
     * @since 2002-12-12
     * @author Mattias Bogeblad
     */

    public static StringBuffer serializeDom(Node node, StringBuffer writeString) {
        int type = node.getNodeType();
        try {
            switch (type) {
            // print the document element
            case Node.DOCUMENT_NODE: {
                writeString.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                writeString = serializeDom(((Document) node).getDocumentElement(), writeString);
                break;
            }
            // print element with attributes
            case Node.ELEMENT_NODE: {
                writeString.append("<");
                writeString.append(node.getNodeName());
                NamedNodeMap attrs = node.getAttributes();
                for (int i = 0; i < attrs.getLength(); i++) {
                    Node attr = attrs.item(i);
                    String outString = " " + attr.getNodeName() + "=\""
                            + replaceSpecialCharacters(attr.getNodeValue()) + "\"";
                    writeString.append(outString);
                }
                writeString.append(">");
                NodeList children = node.getChildNodes();
                if (children != null) {
                    int len = children.getLength();
                    for (int i = 0; i < len; i++)
                        writeString = serializeDom(children.item(i), writeString);
                }
                break;
            }
            // handle entity reference nodes
            case Node.ENTITY_REFERENCE_NODE: {
                String outString = "&" + node.getNodeName() + ";";
                writeString.append(outString);
                break;
            }
            // print cdata sections
            case Node.CDATA_SECTION_NODE: {
                String outString = "<![CDATA[" + node.getNodeValue() + "]]>";
                writeString.append(outString);
                break;
            }
            // print text
            case Node.TEXT_NODE: {
                writeString.append(replaceSpecialCharacters(node.getNodeValue()));
                break;
            }
            // print processing instruction
            case Node.PROCESSING_INSTRUCTION_NODE: {
                String data = node.getNodeValue();
                String outString = "<?" + node.getNodeName() + " " + data + "?>";
                writeString.append(outString);
                break;
            }
            }
            if (type == Node.ELEMENT_NODE) {
                String outString = "</" + node.getNodeName() + ">";
                writeString.append(outString);
            }
        } catch (Exception e) {

        }
        return writeString;
    }

    /**
     * This method replaces special character with their xml-counterpart.
     */

    public static String replaceSpecialCharacters(String value) {
        if (value == null)
            return "";

        StringBuffer newValue = new StringBuffer();
        for (int i = 0; i < value.length(); i++) {
            char c = value.charAt(i);
            if (c == '&') {
                newValue.append("&amp;");
            } else if (c == '<') {
                newValue.append("&lt;");
            } else if (c == '>') {
                newValue.append("&gt;");
            } else if (c == '\'') {
                newValue.append("&apos;");
            } else if (c == '\"') {
                newValue.append("&quot;");
            } else {
                if (isLegalCharacter((int) c))
                    newValue.append(c);
            }
        }
        return newValue.toString();
    }

    private static boolean isLegalCharacter(int ch) {
        return ch == 0x9 || ch == 0xA || ch == 0xD || (ch >= 0x20 && ch <= 0xFFFD)
                || (ch >= 0x1000 && ch <= 0x7FFFFFFF);

    }
}

Related

  1. serialize(Node node)
  2. serialize(Node node)
  3. serialize(Node node, File outdir, String fileName)
  4. serialize(NodeList nodeList)
  5. serializeDom(Node domElement)
  6. serializeElement(Element element)
  7. serializeElement(Element element, boolean omitXmlDeclaration, boolean indent, String method)
  8. serializeNode(Node node)
  9. serializeNode(Node node)