關(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é)點(diǎn)名是:"?+?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é)點(diǎn)名就好了?求各位指點(diǎn)
2017-05-09
最開頭的<bookstore>標(biāo)簽也會進(jìn)入startDocument()方法,所以要排除掉;
另外,后面的結(jié)束標(biāo)簽</bookstore>才會進(jìn)入endDocument()方法