android xml解析 sax,Android用sax读取XML时丢失内容的问题

使用SAX解析XML文档效率比较高,占用内存比较少,所以是Android中解析XML的首先方案。但使用SAX解析XML文档编写程序确不太方便,如果对SAX解析机制不太了解的话,很容易漏掉文本内容。

使用SAX解析XML主要用到的方法有以下3个:

public void startElement(String uri, String localName, String

qName, Attributes attributes)

public void endElement(String s, String s1, String s2) throws

SAXException

public void characters(char[] arg0, int arg1, int arg2)

从字面意思可以猜出他们的作用。startElement:SAX解析XML文档遇到一个标签时会调用该方法,endElement是当遇到一个标签结果时调用此方法,characters:当遇到一个标签之间的内容时调用此方法。

一般来说按照上面的描述,写一个Handler是很容易的。但有一个问题容易忽视。一个标签之间的字符比较多时,或者字符串中包含有”\n”等特殊字符时,就会出现字符丢失的现象。

Android用sax读取XML时

不能读取换行符号

后面的内容的问题

遇到这种问题不要怀疑SAX不能解析标签中含有”\n”或字符比较多的XML。实际上是我们写的Handler是有问题的。SAX在解析XML时,当遇到一个标签中的内容比较多时,就会多次调用characters。所以我们在写Handler时要考虑到这种情况。就不会丢字符了。以下是一种解决方案:建立一个StringBuffer.每次遇到一个标签开始时就清空这个StringBuffer。在每次调用characters时都将字符放到StringBuffer中。在endElement时,StringBuffer中的内容就是一个标签中的完整字符串。

StringBuffer sb = new StringBuffer();

public void startElement(String uri, String localName, String

qName,

Attributes attributes) throws SAXException {

sb.delete(0,sb.length());

}

@Override

public void characters(char[] arg0, int arg1,

int arg2) throws SAXException{

sb.append(arg0, arg1, arg2);

}

public void endElement(String s, String s1, String s2) throws

SAXException {

//TODO 此时StringBuffer中的内容就是标签内的完整字符串。

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值