我在字符串中有以下 XML 片段(注意双重编码的 &):
...
<PARA>
S&amp;P
</PARA>
...
我想要的输出是:
> ... <PARA> S&P </PARA> ...
如果我使用:
StringEscapeUtils.unescapeXml()
实际输出是:
> ... <PARA> S&P </PARA> ...
看来 StringEscapeUtils.unescapeXml() 会转义输入两次,或者只要它包含实体。
有没有更好的实用方法,或者简单的解决方案,可以一次转义每个 xml 实体(不仅仅是几个,而是所有重音字符),这样我的编码 & 部分就不会搞砸?
谢谢, 彼得
最佳答案
当您使用第三方库时,应包含库名称和版本。
StringEscapeUtils
是 Apache Commons Text 和 Apache Commons Lang(已弃用)的一部分。最新版本(截至 2017 年 11 月)是 Commons Text 1.1 和 Commons Lang 3.3.7。两个版本都显示正确的结果。
import org.apache.commons.text.StringEscapeUtils;
public class EscapeTest {
public static void main(String[] args) {
final String s = "<PARA> S&amp;P </PARA>";
System.out.println(StringEscapeUtils.unescapeXml(s));
}
}
输出:<PARA> S&P </PARA>
关于java - 仅转义 XML 实体一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328111/