java xml 特殊字符处理(dom4j)

XML中共有5个特殊的字符,分别是:&<>“’。如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理。有两种解决方法:其一,采用本例中的特殊标签,将包含特殊字符的字符串封装起来;其二,使用XML转义序列表示这些特殊的字符,这5个特殊字符所对应XML转义序列在表4-2中说明: 
java xml 特殊字符处理(dom4j)_第1张图片
Spring在进行XML配置时,如果属性值包含了一个XML的特殊符号,因此我们特意在属性值外添加了一个的XML特殊处理标签,的作用是让XML解析器将标签中的字符串当作普通的文本对待,以防止某些字符串对XML格式造成破坏。来看一个例子: 
XML代码: 

Java代码   收藏代码
  1. "car" class="com.baobaotao.attr.Car">  
  2.     "maxSpeed">  
  3.         200  
  4.       
  5.     "brand">①  
  6.           
  7.       
  8.   


如果使用XML转义序列,我们可以使用以下的配置替换代码清单4-10中的配置: 
XML代码:  
Java代码   收藏代码
  1. "brand">红旗&CA72  
====================================================我是孤独的分割线============================================

看过很多的博客包括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


http://stackoverflow.com/questions/13543102/regular-expression-how-to-match-properties-where-the-value-can-be-of-type-xml











你可能感兴趣的:(java)