Replaces all XML character entities with the character they represent. : XML Data « XML « Java






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

   
    
  








Related examples in the same category

1.Streaming XML
2.extends DefaultHandler to create a XML binding
3.Your won XML binding
4.Parse and format xs:dateTime values
5.Sniffed Xml InputStream to find out the declaration and file encoding
6.Whether the given character is a valid XML space.
7.JAXP 1.3 Datatype API
8.Common XML constants.
9.Sniffed Xml Reader
10.Source To InputSource
11.Utility class for working with xml data
12.whether the given 32 bit character is a valid XML 1.1 character.