关于xml中存在特殊的转义字符,不能正常反序列化问题
1. 为什么要进行转义
在xml文档中,有些字符是有特殊含义的,如:<,>,&,',""
需要进行特殊处理:
<
和>
用来标记xml标签的开始和借宿&
用于定义实体引用'
和"
可能会出现在属性的值中;
如果这些字符直接出现在xml文档中,而没有被转义,那么xml解析器可能就会误解他们的意思,比如,解析器可能错误的认为 <
标志着·一个新的xml元素的开始。
2. 如何进行转义
将下面字符进行xml转义:
<
转义成<
>
转义成>
&
转义成&
'
转义成'
"
转义成"
2.1 使用javax.xml.transform
包来处理:
使用Apache Commons Lang 中的StringEscapeUtils。escapeXm110(String)
方法来转义XML字符串。
java
import org,apache.commons.lang3.StringEscapeUtils;
public Class XmlEscaper{
public static void main(String[] args){
String xml="<note>\n" + "<to>Tove</to>\n"
+"<from><ani/from>"+
"<deading>Reminder</deading>\n"+
"<body>Dont't forget my weekend!</body>\n"
+"</note>";
//使用Apace Commons Langs 进行转义
String escapeXml= StringEscapeUtils.escapeXml10(xml);
System.out.printLN(escapeXml);
}
}
1.2 自己写一个工具包
java
import org,apache.commons.lang3.StringEscapeUtils;
public Class XmlEscaper{
public static void main(String[] args){
String xml="<note>\n" + "<to>Tove</to>\n"
+"<from><ani/from>"+
"<deading>Reminder</deading>\n"+
"<body>Dont't forget my weekend!</body>\n"
+"</note>";
String escapeXml= escapeXml10(xml);
System.out.printLN(escapeXml);
}
private static String escapeXml(String input){
return input.replace("&","&")
.replace("<","<")
.replace(">",">")
.replace("\"",""")
.replace("'","&apos");
}
}