關(guān)于SAXParserHandler類中startElement方法中else if(!qName.equals("book") && !qName.equals("bookstore"))的問題
/** ??*?解析xml元素 ??*/ ?@Override ?public?void?startElement(String?uri,?String?localName,?String?qName, ???Attributes?attributes)?throws?SAXException?{ ??//調(diào)用DefaultHandler類的startElement方法 ??super.startElement(uri,?localName,?qName,?attributes); ??if?(qName.equals("book"))?{ ???bookIndex++; ???//創(chuàng)建一個book對象 ???book?=?new?Book(); ???//開始解析book元素的屬性 ???System.out.println("======================開始遍歷某一本書的內(nèi)容================="); //???//已知book元素下屬性的名稱,根據(jù)屬性名稱獲取屬性值 //???String?value?=?attributes.getValue("id"); //???System.out.println("book的屬性值是:"?+?value); ???//不知道book元素下屬性的名稱以及個數(shù),如何獲取屬性名以及屬性值 ???int?num?=?attributes.getLength(); ???for(int?i?=?0;?i?<?num;?i++){ ????System.out.print("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.print("節(jié)點名是:"?+?qName?+?"---"); ??} ?}
這里為什么要加加一個else if (!qName.equals("book") && !qName.equals("bookstore"))來判斷? 如果qName的值是“book”,前面已經(jīng)有相關(guān)的處理代碼了。如果qName的值是“bookstore”程序應(yīng)該會自動調(diào)用endDocument()方法。既然用不到else if()里面的判斷語句,為什么不直接寫個else ,后面接著輸出qName為節(jié)點名就好了?求各位指點
2017-05-09
最開頭的<bookstore>標簽也會進入startDocument()方法,所以要排除掉;
另外,后面的結(jié)束標簽</bookstore>才會進入endDocument()方法