Java中使用SAX方式解析XML的问题
2013-08-12 11:08
459 查看
话说这几天看Mars老师的Android教程,两天就把重制版全部看完了。实在是不过瘾啊。于是就去下了第一版的全部五季,感觉重制版和原先的版本比明显简单,还是老版本的更适合我的口味。但是老版本出了问题很是蛋疼,因为当时还是2.2、2.3时代,而我现在学习时用的是4.2。
4.0以后不能在主线程访问网络,整整憋了我一个下午才发现原来是这么坑爹的原因。还有如搭的Tomcat无法在Android虚拟机中访问,后来发现是127.0.0.1对于模拟器来说是它的localhost,不是电脑的。需要用10.0.2.2才行。
在第一季20课,无论怎么搞,写的xml解析的输出都是空。这回终于不是版本问题,而是Mars老师写错了=_=
Java文档里面说:
The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the
same external entity so that the Locator provides useful information.
Sax类的解析并不保证一次读出所有数据,因而最保险的方法是用StringBuilder缓存一下(不过看了几篇国内的blog都是用tagName赋成空的办法屏蔽第二次解析,个人觉得这不科学)。
代码如下:
解析完成后清空下
4.0以后不能在主线程访问网络,整整憋了我一个下午才发现原来是这么坑爹的原因。还有如搭的Tomcat无法在Android虚拟机中访问,后来发现是127.0.0.1对于模拟器来说是它的localhost,不是电脑的。需要用10.0.2.2才行。
在第一季20课,无论怎么搞,写的xml解析的输出都是空。这回终于不是版本问题,而是Mars老师写错了=_=
Java文档里面说:
The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the
same external entity so that the Locator provides useful information.
Sax类的解析并不保证一次读出所有数据,因而最保险的方法是用StringBuilder缓存一下(不过看了几篇国内的blog都是用tagName赋成空的办法屏蔽第二次解析,个人觉得这不科学)。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | String tagName; StringBuilder title = new StringBuilder(); StringBuilder artist = new StringBuilder(); StringBuilder country = new StringBuilder(); @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); //!!! 注意,characters并不保证只执行一次就得到数据,所以不能简单的 = if (tagName.equals("TITLE")) { title.append(ch, start, length); } else if (tagName.equals("ARTIST")) { artist.append(ch, start, length); } else if (tagName.equals("COUNTRY")) { country.append(ch, start, length); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); //解析完之后会打印出所有得到的数据 if (localName.equals("CD")) { this.printout(); title.delete(0, title.length()); artist.delete(0, artist.length()); country.delete(0, country.length()); } } |
相关文章推荐
- Java&Xml教程(五)使用SAX方式解析XML文件
- Java&Xml教程(五)使用SAX方式解析XML文件
- Java&Xml教程(五)使用SAX方式解析XML文件
- 【慕课笔记】3-4 应用SAX方式解析XML—使用SAX解析将XML的内容和结构存入JAVA对象
- Java使用SAX,XmlPull两种方式解析XML
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- 使用SAX方式解析XML
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
- java的xml学习[使用SAX解析XML文件]
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- Java XML解析 - 使用SAX 示例
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
- Java之SAX 方式解析 XML(学习笔记)
- 使用SAX方式对XML进行解析
- JAVA解析XML之SAX方式
- 【XML解析】(1)Java下使用JAXP中的DOM解析方式对XML文档进行解析
- java解析xml之一:使用SAX与DOM
- 【慕课笔记】3-3 应用SAX方式解析XML—使用SAX解析XML文件的节点名和节点间文本
- java(12)--xml之sax方式解析文档
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较