XML转义字符,java使⽤replaceAll()替换问题:AninvalidXMLch。。。XML转义字符
XML中需要转义的特殊字符:
& ----------------- &
< ----------------- <
> ----------------- >
' ----------------- '
" ----------------- "
使⽤eclipse⾃⼰封装的XML报⽂:
public String bwXML(Map<String,Object> dbmap,String cl) throws Exception
{
StringBuilder bw =new StringBuilder();
bw.append("<?xml version=\"1.0\>" encoding=\"UTF-8\"?>");
bw.append("<A>");
bw.append(null2str(aa));
bw.append("</A>");
...
bw.append("<B>");
bw.append(null2str(bb));
bw.append("</B>");
String();
}
StringBuilder是⼀个类,可以⽤来处理字符串,例如:
StringBuilder sb=new StringBuilder();
sb.Append(“123”);
sb.Append(“456”);
string str=sb.ToString();
相当于:
string s1=“123”;
string s2=“456”;
string str=s1+s2;
得到的结果相同(“123456”),但是第⼀种⽅法更有效率。
回归正传:
对内容调度的⽅法null2str()如下,可以直接在该⽅法⾥⾯加⼊XML特殊字符的判断:
replaceall()
private String null2str(Object obj)
{
String r="";
if(obj==null){
r="";
}else if(("null").String())){
r="";
}else{
String String();
String a1="";
placeAll("&","&");//使⽤这个⽅法必须先替换"&" (因为先替换其他的话这个会把其他替换好的&再次替换)
placeAll("<","<");
placeAll(">",">");
placeAll("'","'");
placeAll("\"",""");
r=a1;
}
return r;
}
replaceAll() 替换
**出现问题:**An invalid XML character (Unicode: 0x1f) was found in the comment.
**原因:**数据中出现了⾮法字符,官⽅定义了XML的⽆效字符分为三段:
0x00 - 0x08
0x0b - 0x0c
0x0e - 0x1f
对⽐前后数据,这个⽆效字符可能是编码问题产⽣的,因为是添加了⼀个⽆效字符,其他数据不变
解决⽅法: 在替换最后⼀步,将会产⽣的⽆效字符全部替换为空。
即:placeAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]","");
整合即为:
private String null2str(Object obj)
{
String r="";
if(obj==null){
r="";
}else if(("null").String())){
r="";
}else{
String String();
String a1="";
placeAll("&","&"); //使⽤这个⽅法必须先替换"&"(因为先替换其他的话这个会把其他替换好的&再次替换)placeAll("<","<");
placeAll(">",">");
placeAll("'","'");
placeAll("\"",""");
placeAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]","");//将所有xml中视为⽆效字符的替换
r=a1;
}
return r;
}
这样xml解析转发就没有什么问题啦
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论