Android学习札记10:用SAX解析XML文件时,当标签中出现换行符时可能出现读取内容为空的解决方法

来源:互联网 发布:网络语言暴力思修论文 编辑:程序博客网 时间:2024/05/21 07:50

当标签中出现换行时,使用传统的读取方法可能出现为空的情况:



像截图中的title标签使用下面的方法时读取到的内容就可能为空:

@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);content = new String(ch, start, length);}


换用StringBuffer来读取标签中的内容就可以解决这个问题,代码如下:

public class MyHandler extends DefaultHandler{private StringBuffer sb;@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);//sb.delete(0, sb.length());sb = new StringBuffer();}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.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]);}}*/}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);//此时的sb就是从标签中读取到的内容}}


参考资料:

1、http://blog.sina.com.cn/s/blog_83940dfb01010f8h.html

2、http://blog.csdn.net/yangxvlei1123/article/details/7385077

原创粉丝点击