生产环境上遇到过一个SAX解析XML的问题,在订单详情节点中是商户按照规则用字符串拼的内容填充在里面,其中可能会包含有特殊字符的转义字符。比如&的转义:&
在这种情况下自己写的解析代码会导致一个问题,&之前的内容都丢失了。例如节点内容是:商户|店铺|商品描述|09874&蛋糕|88.00,解析完成后得到的结果是:蛋糕|88.00
查阅了一些资料发现,characters(char[] ch, int start, int length)在解析某个节点内容如果遇上不识别的标记是会在同一个节点中执行多次的。而我的characters实现的代码如下:
@Override
public void characters(char[] ch, int start, int length) {
value = new String(ch, start, length);
}
这样就导致了我拿到的结果丢失,代码改成下面这样就能避免这个问题
@Override
public void characters(char[] ch, int start, int length) {
value.append(ch, start, length).toString();
}