SAX 解析XML

package com.sax;

import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.obj.Book;

public class SAXDemo {
 public static void main(String[] args) throws Exception{
  SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
  BookHandler bh = new BookHandler();
  parser.parse(SAXDemo.class.getResourceAsStream("/xml/books.xml"), bh);
  for(Book b : bh.list){
   System.out.println(b);
  }
 }
 static class BookHandler extends DefaultHandler{
  private List<Book> list = new ArrayList<Book>();
  Book book = null;
  String xpath = "";
  @Override
  public void characters(char[] ch, int start, int length)
    throws SAXException {
   String s = new String(ch, start, length);
   if("/books/book/name".equals(xpath)){
    book.setName(s);
   }else if("/books/book/isbn".equals(xpath)){
    book.setIsbn(s);
   }else if("/books/book/authors/name".equals(xpath)){
    book.getAuthors().add(s);
   }else if("/books/book/publisher".equals(xpath)){
    book.setPublisher(s);
   }else if("/books/book/pub-time".equals(xpath)){
    try {
     book.setPubtime(s);
    } catch (Exception e) {
     throw new RuntimeException(e);
    }
   }else if("/books/book/price".equals(xpath)){
    book.setPrice(Double.parseDouble(s));
   }else if("/books/book/pages".equals(xpath)){
    book.setPages(Integer.parseInt(s));
   }
  }
  /**
   * localname:没有前缀的标签名,如果没有命名空间,该字符串为空
   * qname:带前缀的标签名
   */
  public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
   xpath += "/" + qName;
   if("/books/book".equals(xpath)){
    book = new Book();
    list.add(book);
   }
  }
  public void endElement(String uri, String localName, String qName)
    throws SAXException {
   xpath = xpath.substring(0, xpath.lastIndexOf("/"));
  }
 }
}

 

解析的XML文件:

<?xml version="1.0"  encoding="UTF-8" ?>
<books>
 <book>
  <name>XML 从入门到精通</name>
  <isbn>IRUGN8937F6W9K3</isbn>
  <authors>
   <name>张三</name>
   <name>李四</name>
  </authors>
  <publisher>达内出版社</publisher>
  <pub-time>2011-9-29</pub-time>
  <price>500</price>
  <pages>93</pages>
 </book>

 <book>
  <name>XML 从入门到精通</name>
  <isbn>IRUGN8937F6W9K3</isbn>
  <authors>
   <name>张三</name>
   <name>小李</name>
  </authors>
  <publisher>达内出版社</publisher>
  <pub-time>2011-9-29</pub-time>
  <price>500</price>
  <pages>93</pages>
 </book>
</books>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值