当标签中出现换行时,使用传统的读取方法可能出现为空的情况:
像截图中的title标签使用下面的方法时读取到的内容就可能为空:
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
content = new String(ch, start, length);
}
换用StringBuffer来读取标签中的内容就可以解决这个问题,代码如下:
public class MyHandler extends DefaultHandler{
private StringBuffer sb;
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
//sb.delete(0, sb.length());
sb = new StringBuffer();
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
sb.append(ch, start, length);
/* for(int i = start; i < start + length; i++) {
switch (ch[i]) {
case '\\':
sb.append("\\\\");
break;
case '\r':
sb.append("\\r");
break;
case '\n':
sb.append("\\n");
break;
case '\t':
sb.append("\\t");
break;
default:
sb.append(ch[i]);
}
}*/
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
//此时的sb就是从标签中读取到的内容
}
}
参考资料:
1、http://blog.sina.com.cn/s/blog_83940dfb01010f8h.html
2、http://blog.csdn.net/yangxvlei1123/article/details/7385077