解析XML文件___SAX解析
来源:互联网 发布:诚品网络微信商城 编辑:程序博客网 时间:2024/04/25 17:47
sax解析xml
// 得到SAXParserFactorySAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); // 得到SAXParser SAXParser saxParser = saxParserFactory.newSAXParser(); // 得到XMLReader XMLReader xmlReader = saxParser.getXMLReader(); // 给XMLReader设置监听 xmlReader.setContentHandler(handler);// 解析文件 Parse解析的意思xmlReader.parse(new InputSource(getAssets().open("student.xml")));
ContentHandler是接口,实现类 DefaultHandler
private ContentHandler handler = new DefaultHandler() { private String targetName; private List<Student> ss; private Student student; @Override public void startDocument() throws SAXException { System.out.println("读取文件开始"); ss = new ArrayList<Student>(); super.startDocument(); } @Override public void endDocument() throws SAXException { System.out.println("读取文件结束"); System.out.println(ss); super.endDocument(); } @Override public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException { targetName = localName; System.out.println("读取开始标签" + targetName); if ("student".equals(targetName)) { student = new Student(); String value = attributes.getValue("id"); student.setId(Integer.parseInt(value)); } super.startElement(uri, localName, qName, attributes); } @Override public void endElement(String uri, String localName, String qName)throws SAXException { // 用的是localName System.out.println("读取结束标签" + localName); if ("student".equals(localName)) { System.out.println("-----" + student); ss.add(student); student = null;//可以不写 } targetName = null; /**当解析结束时置为空。这里很重要, 如果这里不把preTag置为null,根据startElement(....)方法,preTag的值还是book,当文档顺序读到图中标记4的位置时,会执行characters(char[] ch, int start, int length)这个方法,而characters(....)方 法判断preTag!=null,会执行if判断的代码,这样就会把空值赋值给book,这不是我们想要的。*/ super.endElement(uri, localName, qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 判断targetname不为空后少执行3次(endElement后就不执行了),因为在endElement方法中将targetname置空, if (targetName != null) { String str = new String(ch, start, length); System.out.println("text" + str); if ("name".equals(targetName)) { student.setName(str); } else if ("age".equals(targetName)) { student.setAge(Integer.parseInt(str)); } super.characters(ch, start, length); } } };
0 0
- 解析XML文件___SAX解析
- 解析一个XML文件: XML解析器
- xml解析之SAX解析xml文件
- xml解析---Java解析xml文件
- java 解析 xml文件
- XML文件解析
- XML文件解析
- JstL解析XML文件
- xml文件解析办法
- DOM解析XML文件
- XML文件解析心得
- xml文件解析-SAX
- xml文件解析-DOM
- xml文件解析-JDOM
- xml文件解析-DOM4J
- 解析xml文件实例
- 解析XML文件
- faxapp解析XML文件
- 接口的编写
- Unity3d渲染层级关系小结
- 使用ViewHolder提高ListView的效率
- Java 并发编程:核心理论
- 蓝白红球算法(0 1 2)
- 解析XML文件___SAX解析
- CGLib basic tutorial
- 使用HttpURlConnection 发送POST请求上传文件(带参数)
- 封装
- Java中Synchronized的用法
- Unity3d 一个优秀的程序必备的几种设计模式
- 1027 打印沙漏
- 关于对OKHttp的简单使用
- 探索 ConcurrentHashMap 高并发性的实现机制