当标签中出现换行时,使用传统的读取方法可能出现为空的情况:
像截图中的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