SaxParseTest.java
package cn.pinnsvin; import java.io.IOException; import java.util.ArrayList; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.junit.Test; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import cn.pinnsvin.bean.Book; //sax解析xml public class SaxParseTest { @Test public void saxParse() throws ParserConfigurationException, SAXException, IOException{ //获取工厂 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser(); //获取xmlReader,通过这个reader可以处理ContentHandler XMLReader reader = saxParser.getXMLReader(); //给XMLReader设置contentHandler,ContentHandler是一个接口,里面有太多方法没有实现 //不去实现ContentHandler,而是继承它默认的实现DefaultHandler reader.setContentHandler(new MyHandler()); //解析xml文档 reader.parse("book.xml"); } private class MyHandler extends DefaultHandler{ @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("文档内容:"+(new String(ch,start,length))); } @Override public void endDocument() throws SAXException { System.out.println("文档结束"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("结束标签:</"+qName+">"); } @Override public void startDocument() throws SAXException { System.out.println("文档开始"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("标签开始<"+qName+">"); } } @Test public void saxParse2() throws ParserConfigurationException, SAXException, IOException{ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new DefaultHandler(){ private boolean isPrice=false; private int count=0; @Override public void characters(char[] ch, int start, int length) throws SAXException { if(isPrice&&count==2){ System.out.println(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if("价格".equals(qName)){ isPrice=false; } } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("价格".equals(qName)){ isPrice = true; count++; } } }); xmlReader.parse("book.xml"); } //解析xml文档,并将其转换成ArrayList @Test public void saxParseToList() throws ParserConfigurationException, SAXException, IOException{ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new DefaultHandler(){ private ArrayList<Book> bookSheif = null; private Book book; String tag = null; @Override public void characters(char[] ch, int start, int length) throws SAXException { if("书名".equals(tag)){ book.setTitle(new String(ch,start,length)); }else if("作者".equals(tag)){ book.setAuthor(new String(ch,start,length)); }else if("价格".equals(tag)){ book.setPrice(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { tag = null; if("书架".equals(qName)){ for (Book book1 : bookSheif) { System.out.println(book1); } }else if("书".equals(qName)){ bookSheif.add(book); } } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("书架".equals(qName)){ //创建ArrayList bookSheif = new ArrayList<Book>(); }else if("书".equals(qName)){ //创建对象 book = new Book(); }else if("书名".equals(qName)){ tag = "书名"; }else if("作者".equals(qName)){ tag = "作者"; }else if("价格".equals(qName)){ tag = "价格"; } } }); xmlReader.parse("book.xml"); } }
book.java
package cn.pinnsvin.bean; public class Book { private String title; private String author; private String price; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public String toString() { return "Book [title=" + title + ", author=" + author + ", price=" + price + "]"; } }
book.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> <书> <书名>java深入浅出</书名> <作者>你猜 </作者> <价格>20.50</价格> </书> <书> <书名>c深入浅出</书名> <作者>haha </作者> <价格>99.00</价格> </书> </书架>