怎么做XML字符串替换?

时间:2012-10-12 06:59:47

标签: java xml

我需要在转换为XML文件之前转义XML字符串。我是这样做的:

Java代码:

public static final String[][] XML_ENTITIES = {
    {"&","&amp;"},{">","&gt;"},{"<","&lt;","'","&apos;","\"","&quot;"}
};

public static String escape(String str){
    for(int i=0;i<XML_ENTITIES.length;i++){
        String name = XML_ENTITIES[i][0];
        String value = XML_ENTITIES[i][1];
        int idx = str.indexOf(name);
        if(idx > -1){
            str = str.replace(name, value);
        }
    }
    return str;
}

它工作正常但在某些情况下失败。

示例:

escape(">>,,a,a<<")

输出:

&gt;&gt;,,a,a&lt;&lt;

失败案例:

escape("&amp;>,,a,a<<")

输出:

&amp;amp;&gt;,,a,a&lt;&lt;

如果xml字符串包含&amp;,则无需转义字符串中的&字符。如果我unescape字符串并且逃脱它工作正常。如果没有失误,我该怎么办?

1 个答案:

答案 0 :(得分:0)

public static final String[][] XML_ENTITIES = {
    {"&(?!amp;)","&amp;"},{">","&gt;"},{"<","&lt;","'","&apos;","\"","&quot;"}
};

public static String escape(String str){
    for(int i=0;i<XML_ENTITIES.length;i++){
        String name = XML_ENTITIES[i][0];
        String value = XML_ENTITIES[i][1];
        int idx = str.indexOf(name);
        if(idx > -1){
            str = str.replaceAll(name, value);
        }
    }
    return str;
}