Mega Code Archive

 
Categories / Java Tutorial / XML
 

Escapes all necessary characters in the String so that it can be used in an XML doc

/**  * $Revision: 10205 $  * $Date: 2008-04-11 15:48:27 -0700 (Fri, 11 Apr 2008) $  *  * Copyright (C) 2004-2008 Jive Software. All rights reserved.  *  * This software is published under the terms of the GNU Public License (GPL),  * a copy of which is included in this distribution, or a commercial license  * agreement with Jive.  */ import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.BreakIterator; import java.util.*; import java.util.concurrent.ConcurrentHashMap; /**  * Utility class to peform common String manipulation algorithms.  */ public class StringUtils {     // Constants used by escapeHTMLTags     private static final char[] QUOTE_ENCODE = "&quot;".toCharArray();     private static final char[] AMP_ENCODE = "&amp;".toCharArray();     private static final char[] LT_ENCODE = "&lt;".toCharArray();     private static final char[] GT_ENCODE = "&gt;".toCharArray();     private StringUtils() {         // Not instantiable.     }     /**      * Escapes all necessary characters in the String so that it can be used      * in an XML doc.      *      * @param string the string to escape.      * @return the string with appropriate characters escaped.      */     public static String escapeForXML(String string) {         if (string == null) {             return null;         }         char ch;         int i = 0;         int last = 0;         char[] input = string.toCharArray();         int len = input.length;         StringBuilder out = new StringBuilder((int)(len * 1.3));         for (; i < len; i++) {             ch = input[i];             if (ch > '>') {             }             else if (ch == '<') {                 if (i > last) {                     out.append(input, last, i - last);                 }                 last = i + 1;                 out.append(LT_ENCODE);             }             else if (ch == '&') {                 if (i > last) {                     out.append(input, last, i - last);                 }                 last = i + 1;                 out.append(AMP_ENCODE);             }             else if (ch == '"') {                 if (i > last) {                     out.append(input, last, i - last);                 }                 last = i + 1;                 out.append(QUOTE_ENCODE);             }         }         if (last == 0) {             return string;         }         if (i > last) {             out.append(input, last, i - last);         }         return out.toString();     } }