android XML特殊字符处理

来源:互联网 发布:西部数码域名抢注 编辑:程序博客网 时间:2024/05/13 22:06


public class XMPPUtil
{
    /**
     * XML特殊字符变为转义字符
     *
     * @param string the string to escape.
     * @return the string with appropriate characters escaped.
     */
    public static String escapeXML(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;");
            }
            else if (ch == '>')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append("&gt;");
            }
           
            else if (ch == '&')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                // Do nothing if the string is of the form &#235; (unicode value)
                if (!(len > i + 5 && input[i + 1] == '#' && Character.isDigit(input[i + 2])
                    && Character.isDigit(input[i + 3]) && Character.isDigit(input[i + 4]) && input[i + 5] == ';'))
                {
                    last = i + 1;
                    out.append("&amp;");
                }
            }
            else if (ch == '"')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append("&quot;");
            }
            else if (ch == '\'')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append("&apos;");
            }
        }
        if (last == 0)
        {
            return string;
        }
        if (i > last)
        {
            out.append(input, last, i - last);
        }
        return out.toString();
    }
   
    /**
     * XMl转义字符变为特殊字符
     *
     * @param string
     * @return
     */
    public static String unescapeXML(String string)
    {
        return string.replace("&amp;", "&")
            .replace("&quot;", "\"")
            .replace("&lt;", "<")
            .replace("&gt;", ">")
            .replace("&apos", "'");
    }
}

public class XMPPUtil
{
    /**
     * XML特殊字符变为转义字符
     *
     * @param string the string to escape.
     * @return the string with appropriate characters escaped.
     */
    public static String escapeXML(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;");
            }
            else if (ch == '>')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append("&gt;");
            }
           
            else if (ch == '&')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                // Do nothing if the string is of the form &#235; (unicode value)
                if (!(len > i + 5 && input[i + 1] == '#' && Character.isDigit(input[i + 2])
                    && Character.isDigit(input[i + 3]) && Character.isDigit(input[i + 4]) && input[i + 5] == ';'))
                {
                    last = i + 1;
                    out.append("&amp;");
                }
            }
            else if (ch == '"')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append("&quot;");
            }
            else if (ch == '\'')
            {
                if (i > last)
                {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append("&apos;");
            }
        }
        if (last == 0)
        {
            return string;
        }
        if (i > last)
        {
            out.append(input, last, i - last);
        }
        return out.toString();
    }
   
    /**
     * XMl转义字符变为特殊字符
     *
     * @param string
     * @return
     */
    public static String unescapeXML(String string)
    {
        return string.replace("&amp;", "&")
            .replace("&quot;", "\"")
            .replace("&lt;", "<")
            .replace("&gt;", ">")
            .replace("&apos", "'");
    }
}

0 0