SAX解析
public?class?SAXParserHandler?extends?DefaultHandler?{ ????int?bIndex?=?0; ????private?ArrayList<Book>?bookList?=?new?ArrayList<Book>(); ????Book?book=null; ????String?qValue?=?null; ????public?ArrayList<Book>?getBookList()?{ ????????return?bookList; ????} ????@Override ????public?void?startDocument()?throws?SAXException?{ ????????super.startDocument(); ????????System.out.println("開(kāi)始解析XML文件"); ????} ????@Override ????public?void?endDocument()?throws?SAXException?{ ????????super.endDocument(); ????????System.out.println(); ????????System.out.println("一共有"+bookList.size()+"本書(shū)"); ????????for?(int?i=0;i<bookList.size();i++){ ????????????System.out.println("一共有"+(i+1)+"本書(shū)"); ????????????Book?b?=?bookList.get(i); ????????????System.out.println("書(shū)名:"+b.getName()); ????????????System.out.println("作者:"+b.getAuthod()); ????????????System.out.println("年份:"+b.getYear()); ????????????System.out.println("價(jià)格:"+b.getPrice()); ????????????System.out.println("語(yǔ)言:"+b.getLanguage()); ????????} ????????System.out.println("結(jié)束解析XML文件"); ????} ????@Override ????public?void?startElement(String?uri,?String?localName,?String?qName,?Attributes?attributes)?throws?SAXException?{ ????????super.startElement(uri,?localName,?qName,?attributes); ????????if(qName.equals("book")){ ????????????bIndex++; ????????????System.out.println("開(kāi)始遍歷第"+bIndex+"本書(shū)"); //????????????//已知屬性的情況 //????????????String?value?=?attributes.getValue("id"); //????????????System.out.println("book的id屬性值為:"+value); ????????????//不知道屬性的值 ????????????for?(int?i=0;i<attributes.getLength();i++){ ????????????????System.out.println("第"+(i+1)+"個(gè)屬性名為:"+attributes.getQName(i)); ????????????????System.out.println("第"+(i+1)+"個(gè)屬性值為:"+attributes.getValue(i)); ????????????} ????????????System.out.println("結(jié)束遍歷第"+bIndex+"本書(shū)"); ????????}else?if(!qName.equals("bookstore")&&!qName.equals("name")){ ????????????System.out.print("節(jié)點(diǎn)名為:"+qName+"---"); ????????} ????} ????@Override ????public?void?endElement(String?uri,?String?localName,?String?qName)?throws?SAXException?{ ????????super.endElement(uri,?localName,?qName); ????????if?(qName.equals("book")){ ????????????bookList.add(book); ????????????book?=null; ????????????System.out.println("開(kāi)始保存第"+bIndex+"本書(shū)的內(nèi)容。。。。。。"); ????????} ????????else?if?(qName.equals("id")){ ????????????book.setId(qValue); ????????} ????????else?if?(qName.equals("name"))?{ ????????????book.setName(qValue); ????????} ????????else?if?(qName.equals("authod")){ ????????????book.setAuthod(qValue); ????????} ????????else?if?(qName.equals("year")){ ????????????book.setYear(qValue); ????????} ????????else?if?(qName.equals("price")){ ????????????book.setPrice(qValue); ????????}else?if(qName.equals("language")){ ????????????book.setLanguage(qValue); ????????} ????} ????@Override ????public?void?characters(char[]?ch,?int?start,?int?length)?throws?SAXException?{ ????????super.characters(ch,?start,?length); ????????qValue?=?new?String(ch,start,length); ????????if(!qValue.trim().equals("")){ ????????????System.out.println("節(jié)點(diǎn)值為:"+qValue); ????????} ????} }
public?class?SAXTest?{ ????public?static?void?main(String[]?args)?throws?Exception?{ ????????SAXParserFactory?factory?=?SAXParserFactory.newInstance(); ????????SAXParser?parser?=?factory.newSAXParser(); ????????SAXParserHandler?handler?=?new?SAXParserHandler(); ????????parser.parse("books.xml",handler); ????} }
public?class?Book?{ ????private?String?id; ????private?String?name; ????private?String?authod; ????private?String?price; ????private?String?year; ????private?String?language; ????public?Book(){} ????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?getAuthod()?{ ????????return?authod; ????} ????public?void?setAuthod(String?authod)?{ ????????this.authod?=?authod; ????} ????public?String?getPrice()?{ ????????return?price; ????} ????public?void?setPrice(String?price)?{ ????????this.price?=?price; ????} ????public?String?getYear()?{ ????????return?year; ????} ????public?void?setYear(String?year)?{ ????????this.year?=?year; ????} ????public?String?getLanguage()?{ ????????return?language; ????} ????public?void?setLanguage(String?language)?{ ????????this.language?=?language; ????} }
求助,為什么SAXPaserHandler中的endElement中會(huì)報(bào)空指令異常?
2017-08-12
你的startElement()方法里沒(méi)有創(chuàng)建book對(duì)象,應(yīng)該在?bIndex++;之后 創(chuàng)建一個(gè)?book= new Book();應(yīng)該就對(duì)了,試試看看