【慕课笔记】3-4 应用SAX方式解析XML—使用SAX解析将XML的内容和结构存入JAVA对象

来源:互联网 发布:万历十五年版本的 知乎 编辑:程序博客网 时间:2024/05/01 23:23
public class TestSAX {public static void main(String[] args) {//获取一个SAXParserFactory的实例SAXParserFactory factory=SAXParserFactory.newInstance();try {//通过factory获取SAXParser的实例SAXParser parser=factory.newSAXParser();SAXParserHandler handler=new SAXParserHandler();parser.parse("haha.xml", handler);System.out.println("共有"+handler.getBooklist().size()+"本书");for(Book book:handler.getBooklist()){System.out.println(book.getId());System.out.println(book.getAuthor());System.out.println(book.getName());System.out.println(book.getPrice());System.out.println(book.getYear());System.out.println(book.getLanguage());System.out.println("----finish this book----");}} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}}}

public class SAXParserHandler extends DefaultHandler {int bookIndex=0;String value=null;Book book=null;private ArrayList<Book> booklist=new ArrayList<Book>();public ArrayList<Book> getBooklist() {return booklist;}@Override//用来遍历xml的开始标签public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {//调用DefaultHandler类的startElement方法super.startElement(uri, localName, qName, attributes);//开始解析book元素的属性if(qName.equals("book")){//创建一个book对象book=new Book();bookIndex++;System.out.println("=============开始遍历"+bookIndex+"本书内容==============");////已知book元素下属性的名称,根据属性名称获取属性值//String value=attributes.getValue("id");//System.out.println("book的属性值是:"+value);//不知道book元素下属性的名称和个数,如何获取属性名和属性值int num=attributes.getLength();for(int i=0;i<num;i++){System.out.println("book元素的第"+(i+1)+"个属性名是"+attributes.getQName(i));System.out.println("----属性值是"+attributes.getValue(i));if(attributes.getQName(i).equals("id"))book.setId(attributes.getValue(i));}}else if(!qName.equals("book") && !qName.equals("bookstore")){System.out.println("节点名是"+qName);}}@Override//用来遍历xml的结尾标签public void endElement(String uri, String localName, String qName)throws SAXException {//调用DefaultHandler类的endElement方法super.endElement(uri, localName, qName);//判断是否针对一本书已经遍历结束if(qName.equals("book")){booklist.add(book);book=null;System.out.println("=============结束遍历"+bookIndex+"本书内容==============");}else if(qName.equals("name"))book.setName(value);else if(qName.equals("author"))book.setAuthor(value);else if(qName.equals("year"))book.setYear(value);else if(qName.equals("price"))book.setPrice(value);else if(qName.equals("language"))book.setLanguage(value);}@Override//用来标识解析开始public void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();System.out.println("SAX解析开始");}@Override//用来标识解析结束public void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();System.out.println("SAX解析结束");}@Override//输出节点值public void characters(char[] ch, int start, int length)throws SAXException {super.characters(ch, start, length);value=new String(ch,start,length);if(!value.trim().equals("")){//如果去掉空格后不等于空字符串则输出System.out.println(value);}}}

public class Book {private String id;private String name;private String author;private String year;private String price;private String language;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getYear() {return year;}public void setYear(String year) {this.year = year;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}}


0 0
原创粉丝点击