Mega Code Archive

 
Categories / Java / XML
 

Replaces all XML character entities with the character they represent

/*  * 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    * &amp; 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;     }   } }