Java XML:如何转义'&',但跳过'&'

Rub*_*con 0 java xml

我需要逃避'&',但跳过 &

我用下一个功能

public static String translateAll(String input, String[] patterns, String[] replacements) {
    String result = input;

    for (int i = 0; i < patterns.length; i++) {
        result = result.replaceAll(patterns[i], replacements[i]);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

...

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

public static String escape(String input) {
    return translateAll(input, decoded, encoded);
}
Run Code Online (Sandbox Code Playgroud)

...

String escapedBodyValue = XMLUtils.escape(originBodyValue);
Run Code Online (Sandbox Code Playgroud)

它取代了所有与使用&amp; ,但它也全部替换&amp;&amp;amp;

那么,如何跳过已经转义过的角色呢?

Ano*_*sse 6

不要这样做.您刚刚突破的东西比他们更是已经...在1小时内,你会发现,你的做法也取代&quot;&amp;quot;,而你需要做的另一个黑客...

你的逃跑显然已经破坏了.不要使用字符串替换来破坏它,但尝试将数据解析回它应该意味着什么,然后使用产生正确转义版本的正确编码器.

简而言之:永远不会println用来生成XML.使用执行转义权限的XML生成器.

另见这个着名的 StackOverflow问题/答案:https://stackoverflow.com/a/1732454/1060350