【发布时间】:2018-12-13 20:49:43
【问题描述】:
我们从一个来源获取 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="&lt;html&gt;Welcome User, &lt;br&gt; Happy to have you. &lt;/html&gt;" 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。我们只想删除那些在下一阶段无法被 SAX 解析器解析的字符。