Java tutorial
/* * 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; } } }