java xml 特殊字符处理(dom4j)
2015-12-09 18:40
597 查看
XML中共有5个特殊的字符,分别是:&<>“’。如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理。有两种解决方法:其一,采用本例中的<![CDATA[ ]]>特殊标签,将包含特殊字符的字符串封装起来;其二,使用XML转义序列表示这些特殊的字符,这5个特殊字符所对应XML转义序列在表4-2中说明:
Spring在进行XML配置时,如果属性值包含了一个XML的特殊符号,因此我们特意在属性值外添加了一个<![CDATA[ ]]>的XML特殊处理标签,<![CDATA[ ]]>的作用是让XML解析器将标签中的字符串当作普通的文本对待,以防止某些字符串对XML格式造成破坏。来看一个例子:
XML代码:
Java代码
<bean id="car" class="com.baobaotao.attr.Car">
<property name="maxSpeed">
<value>200</value>
</property>
<property name="brand">①
<value><![CDATA[红旗&CA72]]></value>
</property>
</bean>
如果使用XML转义序列,我们可以使用以下的配置替换代码清单4-10中的配置:
XML代码:
Java代码
<property name="brand"><value>红旗&CA72</value></property>
====================================================我是孤独的分割线============================================
看过很多的博客包括stackoverflow都是在说xml string内部绝对不能出现几个特殊字符,要想程序能正确运行必须要转义或者加CDATA标签等等,然后就让手动地转义好。这不废话吗!这些我能不知道么。
关键是假如一个服务器端处理程序接收到客户端app请求中有一个xml String 但是用户没给特殊字符转义,同时客户app更新一次不太容易,咋办?
我需要剥离出包含转义字符的属性或text值。
http://stackoverflow.com/questions/13543102/regular-expression-how-to-match-properties-where-the-value-can-be-of-type-xml
Spring在进行XML配置时,如果属性值包含了一个XML的特殊符号,因此我们特意在属性值外添加了一个<![CDATA[ ]]>的XML特殊处理标签,<![CDATA[ ]]>的作用是让XML解析器将标签中的字符串当作普通的文本对待,以防止某些字符串对XML格式造成破坏。来看一个例子:
XML代码:
Java代码
<bean id="car" class="com.baobaotao.attr.Car">
<property name="maxSpeed">
<value>200</value>
</property>
<property name="brand">①
<value><![CDATA[红旗&CA72]]></value>
</property>
</bean>
如果使用XML转义序列,我们可以使用以下的配置替换代码清单4-10中的配置:
XML代码:
Java代码
<property name="brand"><value>红旗&CA72</value></property>
====================================================我是孤独的分割线============================================
看过很多的博客包括stackoverflow都是在说xml string内部绝对不能出现几个特殊字符,要想程序能正确运行必须要转义或者加CDATA标签等等,然后就让手动地转义好。这不废话吗!这些我能不知道么。
关键是假如一个服务器端处理程序接收到客户端app请求中有一个xml String 但是用户没给特殊字符转义,同时客户app更新一次不太容易,咋办?
我需要剥离出包含转义字符的属性或text值。
//escape input string if(path.contains("title")){ elementStr = getEscapedStr(elementStr,false); }else if(path.contains("scheduleTurnOff")){ elementStr = getEscapedStr(elementStr,true); } private String getEscapedStr(String str,boolean isInAttribute){ String result = new String(); if(!isInAttribute){//case title int start = str.indexOf('>'); int end = str.lastIndexOf('<'); result = str.substring(0, start+1)+ StringEscapeUtils.escapeXml(str.substring(start+1, end)) +str.substring(end); }else{//case scheduleturnoff's attibute name String[] strary = str.split("\"");//通过“号分割xml string for (int i=0;i<strary.length;i++) { if(strary[i].equals(" name="))//name属性中可能会有特殊字符 strary[i+1] = StringEscapeUtils.escapeXml(strary[i+1]); } result+=strary[0]; for (int i=1;i<strary.length;i++) {//组合字符串 result+="\""+strary[i]; } } return result; }
http://stackoverflow.com/questions/13543102/regular-expression-how-to-match-properties-where-the-value-can-be-of-type-xml
相关文章推荐
- Spring中TransactionTemplate 简单灵活的事务配置及使用
- java内存泄露
- 将Emoji表情添加到项目中
- springMVC 引用@resource要要注意的问题
- java 自定义注解以及获得注解的值
- [javase学习笔记]-2.5 进制扫盲
- java引用传递和值传递的详细探讨
- 公司初创时期的技术路线系列--1.JDK安装
- java的base64编码
- spring - constructor-arg 的使用
- Eclipse中Maven工程缺少Maven Dependencies
- 【Java EE (Struts2 + Spring + Hibernate)开发】 :Hibernate(二)之【数据过滤|事务控制|二级缓存和查询缓存|事件机制】
- Java Reflection
- Spring的声明试事务
- 聊聊Spring系列_Index
- java基础(二)
- java基础(一)
- 在Java程序中打log
- Java的λ表达(lambda)
- Eclipse利用Axis2插件构建Web Service并测试