xml文件解析之sax解析
来源:互联网 发布:python网页版安装 编辑:程序博客网 时间:2024/05/22 15:24
java的SAX方式解析xml时,解析类需要继承DefaultHandler类,并覆写startDocument、startElement、characters、endElement和endDocument方法。
示例如下:
package com.benny.demo.xml;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.helpers.DefaultHandler;/** * TODO 这里添加描述 * * @author xiaobing * @version V 1.0 * @since 2014-5-21 */public class MyHandler extends DefaultHandler{private List<Book> books;private String currentTag;private Book book;/** * 构造方法 */public MyHandler(){// TODO Auto-generated constructor stub}public void startDocument(){books = new ArrayList<Book>();//初始化数据容器集合}public void startElement(String uri, String localName, String qName, Attributes attributes){if ("book".equals(qName))//根据qName判断读到的标,并根据标签确定当前要作的操作{book = new Book();//初始化存储数据对象for (int i = 0; i < attributes.getLength(); i++) //读取标签属性值{if ("id".equals(attributes.getQName(i))){book.setId(attributes.getValue(i));}}}currentTag = qName; //记录读取到下一个标签前的标签作为当前标签}public void characters(char ch[], int start, int length){String text = new String(ch, start, length); //此处读取到的值就是currentTag记录的标签的值if ("name".equals(currentTag)){book.setName(text);}else if ("price".equals(currentTag)){book.setPrice(text);}}public void endElement(String uri, String localName, String qName){if ("book".equals(qName)){books.add(book);//添加到集合中}currentTag = null;}public void endDocument(){//根据情况,此方法可不覆写}public List<Book> getBooks(){return books;}}
解析类调用方法如下:
public static void main(String[] args){File file = new File("d:\\books.xml");MyHandler handler = new MyHandler();try{InputStream is = new FileInputStream(file);SAXParser parser = SAXParserFactory.newInstance().newSAXParser();parser.parse(is, handler); //此方法无返回值,调用解析后,解析结果在handler中List<Book> books = handler.getBooks(); //从handler中取出解析后的数据for (Book book : books){System.out.println(book);}}catch (FileNotFoundException e){e.printStackTrace();}catch (ParserConfigurationException e){// TODO Auto-generated catch blocke.printStackTrace();}catch (SAXException e){// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}
从解析过程可以看出,我们采用sax解析时很多时候要根据读到的标签是什么来判断该做什么,所以sax解析的前提是我们要知道xml的内容格式,每个sax方式实现的解析都是针对特定格式的xml文件的,也就是拿着一个具体的xml了,然后才能去读它。
附:
解析的xm文件内容如下:
<?xml version="1.0" encoding="utf-8"?><books><book id="1001"><name>Thinking In Java</name><price>80.00</price></book><book id="1002"><name>Core Java</name><price>90.00</price></book><book id="1003"><name>Hello, Andriod</name><price>100.00</price></book></books>
0 0
- xml解析之SAX解析xml文件
- Java 解析 XML 文件之 SAX 解析
- xml文件解析之sax解析
- XML文件解析之SAX解析
- XML学习之SAX解析XML文件
- xml文件解析-SAX
- sax解析xml文件
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析xml文件
- SAX解析xml文件
- XML文件解析 sax
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- 不同编程语言中获取现在的Unix时间戳
- javaEE jsp自定义标签
- Spring 集成 HornetQ Topic 施用
- hibernate里inverse和cascade的理解
- 移动互联网营销
- xml文件解析之sax解析
- Apache配置
- 【Leetcode】Palindrome Number
- Linux下用crontab定时执行PHP程序
- Win2003系统安装SQL Sever2000后1433端口未开放的解释
- 操作系统(计算机管理控制程序)1
- vector
- jQuery Timer 实现的新邮件提醒
- (四次元新浪微博源代码学习笔记0)导入源代码