java 中的SAX解析XML的使用(一)

1 篇文章 0 订阅
读取的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1">
<name>Thinking in java</name>
<price>89</price>
</book>
<book id="3">
<name>Spring in Action</name>
<price>46</price>
</book>
<book id="9">
<name>Java Web development start</name>
<price>12</price>
</book>
</books>




public class SAXTest {

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
getBooks();
}

public static void getBooks() throws Exception
{
List<Book> books = new ArrayList<Book>();//保存book
SAXParserFactory saxFactory = SAXParserFactory.newInstance();//sax转换工厂类
SAXParser parser = saxFactory.newSAXParser();//创建一个新的转换器
//文件输入流
FileInputStream fi = new FileInputStream(SAXTest.class.getClassLoader().getResource("Test.xml").getPath());
SAXHandler handler = new SAXHandler(books);//xml处理类
parser.parse(fi, handler);//读取xml
books = handler.getBooks();//获取books
for(Book book : books)//输出
{
System.out.println("ID: " + book.getId() + " Name: "+ book.getName() + " Price: " + book.getPrice());
}
}
}



//xml文件读取的处理类
public class SAXHandler extends DefaultHandler {
//存放书籍
private List<Book> books ;
private String preElement = null;//存放之前一个Element
private Book book = null;//存放一本书
public SAXHandler(List<Book> books)
{
this.books = books;
}
public SAXHandler(){
}

public List<Book> getBooks()
{
return books;//返回list
}

@Override
public void startDocument() throws SAXException {
//标识文档的开始
System.out.println("the document start");
//创建一个list来
books = new ArrayList<Book>();
super.startDocument();
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//当一个元素开始时,调用此方法
System.out.println("start element " + qName);
if("book".equals(qName))
{
book = new Book();//创建一本书
book.setId(Integer.parseInt(attributes.getValue(0)));
}
preElement = qName;//获取当前元素
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//一个元素结束时调用此方法
System.out.println("end element " + qName);
if("book".equals(qName))//判断当前结束的元素是不是book
{
books.add(book);//加入list中
book = null;//清空
System.out.println();//换一行
}
preElement = null;//将前一个元素清空
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//当为文本节点时调用此方法
//判断上个节点是不是name
if("name".equals(preElement)){
if(book == null)
{
book = new Book();
}
book.setName(new String(ch,start,length));
}
//判断上个节点是否price
if("price".equals(preElement)){
if(book == null)
{
book = new Book();
}
book.setPrice(Float.parseFloat(new String(ch,start,length)));
}

}
@Override
public void endDocument() throws SAXException {
//文档结束时调用
System.out.println("end document !");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值