java - 替换Java字符串中的xml特殊字符
问题描述
我们从一个来源获取 XML,然后传递给另一个实体进行进一步处理。但是,获取的 XML 在属性值中包含特殊字符,这些字符对于下一个过程是不可接受的。例如
样本输入:
"<Message text="<html>Welcome User, <br> Happy to have you. <br>.</html>"
预期输出:
"<Message text="<html>Welcome User, <br> Happy to have you. <br>.</html>">
样本输入:<Message text="<html>Welcome User, <br> Happy to have you. </html>" Multi="false"> <Meta source="system" dest="any"></Meta></Message>
输出:<Message text="<html>Welcome User, <br> Happy to have you. </html>" Multi="false"> <Meta source="system" dest="any"></Meta></Message>
但是如果输入有多个标签,<br>
则不会被替换。<br>
我们正在使用以下代码:
String xml = "<Message text=\"<html>Welcome User, <br> Happy to have you. <br>.</html>\" Multi=\"false\"><Meta source=\"system\" dest=\"any\"></Meta></Message>";
System.out.println("ORG:" + xml);
xml = replaceChars(xml);
System.out.println("NEW:" + xml);
private static String replaceChars(String xml)
{
xml = xml.replace("&", "&");
xml = xml.replaceAll("\"<([^<]*)>", "\"<$1>");
xml = xml.replaceAll("</([^<]*)>\"", "</$1>\"");
xml = xml.replaceAll("\"([^<]*)<([^<]*)>([^<]*)\"", "\"$1<$2>$3\"");
return xml;
}
解决方案
请不要使用正则表达式转义 XML 中的特殊字符。
你能保证这将适用于所有可能的 html 输入与所有 HTML 和 XML 怪癖(非常广泛的规范!!!)?
只需使用许多实用程序之一来转义 XML 字符串。
Apache Commons 非常流行——请看这个例子
推荐阅读
- reactjs - 将商品添加到购物车 (addcartItems) 的 ReactContext 函数不起作用
- python-3.x - 为什么 Python 以十六进制打印转义序列?
- python - 一副纸牌的功能和输入
- php - 使用 GCP PHP 客户端库创建文件夹
- c# - Parallel.ForEach 和 AsParallel().ForAll(冻结)
- javascript - 当我创建一个新类时,尝试将数据推送到一个空数组没有按预期工作
- c - printf() 中的逗号分隔表达式给出了意外的结果
- prolog - 如何在不更改变量名的情况下加入序言中的两个列表
- karate - 空手道 - 在运行测试用例时编辑 xml
- swift - ScrollView 开始从右到左滚动 iOS