关于xml中存在特殊的转义字符,不能正常反序列化问题

关于xml中存在特殊的转义字符,不能正常反序列化问题

1. 为什么要进行转义

在xml文档中,有些字符是有特殊含义的,如:<,>,&,',""需要进行特殊处理:

  • <> 用来标记xml标签的开始和借宿
  • & 用于定义实体引用
  • '" 可能会出现在属性的值中;

如果这些字符直接出现在xml文档中,而没有被转义,那么xml解析器可能就会误解他们的意思,比如,解析器可能错误的认为 < 标志着·一个新的xml元素的开始。

2. 如何进行转义

将下面字符进行xml转义:

  • < 转义成 &lt;
  • > 转义成 &gt;
  • & 转义成 &amp;
  • ' 转义成 '
  • " 转义成 &quot;
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("&","&amp;")
             .replace("<","&lt;")
             .replace(">","&gt;")
             .replace("\"","&quot;")
             .replace("'","&apos");
}

}
相关推荐
微微1笑抽了筋16 小时前
xml中设置透明度
xml
Source.Liu1 天前
【Uppsala】入口模块(lib.rs)
xml·rust
Source.Liu2 天前
【Uppsala】介绍
xml·rust
Wang's Blog2 天前
AI Agent白手起家37: LangChain 输出解析器实战:文本、JSON、XML 与 Pydantic
xml·langchain·json
initialize13062 天前
Oracle数据库 binary XML data类型同步
xml·数据库
御坂嘀喵 白日焰火2 天前
LINQ之路18:LINQ to XML之导航和查询
xml·solr·linq
残月心殇 请珍惜枸3 天前
LINQ之路17:LINQ to XML之X-DOM介绍
xml·solr·linq
x17388062735 天前
XXE外部实体注入
xml·笔记
云水一下7 天前
零基础玩转bWAPP靶场(三十):XML/XPath 注入(登录表单)
xml·web安全·bwapp
云水一下7 天前
零基础玩转bWAPP靶场(三十一):XML/XPath 注入(搜索)
xml·web安全·bwapp