XML解析:重写DefaultHandler.characters的注意事项

问题描述:
使用SAX解析XML时,重写DefaultHandler.characters方法,用来获取elemnt之间的content。但是,偶尔获取的content不全。

问题原因:
查看javadoc找到原因,如下:【编写代码时不能假定一次读入一个 char 的算法将适用于字符单元;在某些情况下这些算法将拆分一些字符。这与在什么情况下 XML 允许有任意字符(如属性值、处理指令数据、注解以及从此方法中报告的数据)相关。通常还与 Java 代码控制国际化的文本时相关;该问题不是 XML 独有的。】

具体内容参照代码修改点。
public class SAXModelHandler extends DefaultHandler {
//2010-10-29 change by huanghao start
// private String currentValue = null;
private StringBuffer currentValue = new StringBuffer();
//2010-10-29 change by huanghao end

public void characters(char[] ch, int start, int length)
throws SAXException {
// 取出目前节点对应的值
//2010-10-29 change by huanghao start
// currentValue = new String(ch, start, length).replaceAll("\n", "").replaceAll("\t", "");
currentValue.append(ch, start, length);
//2010-10-29 change by huanghao end
}

public void startElement(String uri, String localName, String qName,
Attributes attr) throws SAXException {
//2010-10-29 add by huanghao start
currentValue.delete(0, currentValue.length());
//2010-10-29 add by huanghao end
}

public void endElement(String uri, String localName, String qName)
throws SAXException {
//2010-10-29 add by huanghao change
// if(currentValue != null && !currentValue.equals("\n\t\t\t")){
// params = currentValue.split(",");
// }
String value = currentValue.toString().trim();
if(value != null && !value.equals("\n\t\t\t")){
params = value.split(",");
}
//2010-10-29 add by huanghao change

}
}

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值