Utils.java Source code

Java tutorial

Introduction

Here is the source code for Utils.java

Source

/*
 * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
 *
 * Licensed under the Aduna BSD-style license.
 */
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Utils {
    /**
     * Replaces all XML character entities with the character they represent.
     */
    public static String resolveEntities(String text) {
        int ampIndex = text.indexOf('&');

        if (ampIndex == -1) {
            // Text doesn't contain any entities
            return text;
        }

        StringBuilder sb = new StringBuilder((int) (1.1 * text.length()));
        int prevIndex = 0;

        while (ampIndex >= 0) {
            int colonIndex = text.indexOf(';', ampIndex);

            sb.append(text.substring(prevIndex, ampIndex));
            sb.append(resolveEntity(text.substring(ampIndex + 1, colonIndex)));

            prevIndex = colonIndex + 1;
            ampIndex = text.indexOf('&', prevIndex);
        }

        sb.append(text.substring(prevIndex));

        return sb.toString();
    }

    /**
     * Resolves an entity reference or character reference to its value. 
     *
     * @param entName The 'name' of the reference. This is the string between
     * & and ;, e.g. amp, quot, #65 or #x41.
     * @return The value of the supplied reference, or the reference itself
     * if it could not be resolved.
     */
    public static String resolveEntity(String entName) {
        if (entName.startsWith("#")) {
            // character reference
            StringBuilder sb = new StringBuilder();
            if (entName.charAt(1) == 'x') {
                // Hex-notation
                sb.append((char) Integer.parseInt(entName.substring(2), 16));
            } else {
                // Dec-notation
                sb.append((char) Integer.parseInt(entName.substring(1)));
            }
            return sb.toString();
        } else if (entName.equals("apos")) {
            return "'";
        } else if (entName.equals("quot")) {
            return "\"";
        } else if (entName.equals("gt")) {
            return ">";
        } else if (entName.equals("lt")) {
            return "<";
        } else if (entName.equals("amp")) {
            return "&";
        } else {
            return entName;
        }
    }
}