第四章DOM4J的應用最后一小節(jié)里的作業(yè),我用switch來替代之前JDOM4J的if-else語句保存子節(jié)點的內(nèi)容時,為什么會出現(xiàn)保存下來的兩本書都是同樣的內(nèi)容?而且內(nèi)容和節(jié)點名不一致。
package?Dom4j; import?java.awt.List; import?java.io.File; import?java.util.ArrayList; import?java.util.Iterator; import?javax.lang.model.element.Element; import?org.dom4j.Attribute; import?org.dom4j.DocumentException; import?org.dom4j.io.SAXReader; import?org.w3c.dom.Document; import?com.imooc.entity.Book; public?class?DOM4JTest?{ private?static?ArrayList<Book>?bookList?=?new?ArrayList<Book>(); public?static?void?main(String[]?args)?{ //解析book.xml文件 //創(chuàng)建SAXreader的對象 SAXReader??reader?=?new?SAXReader(); try?{ //通過reader對象的read方法加載book.xml文件,獲取document對象 org.dom4j.Document?document?=?reader.read(new?File("src/res/book.xml")); //通過document對象獲取根節(jié)點bookstore org.dom4j.Element?bookStore?=?document.getRootElement(); //element對象的elementIterator方法獲取迭代器 Iterator?it?=?bookStore.elementIterator(); //遍歷迭代器,獲取根節(jié)點中的信息 while(it.hasNext()){ Book?rbook?=?new?Book(); System.out.println("======開始遍歷某一本書======"); org.dom4j.Element?book?=?(org.dom4j.Element)it.next(); //獲取book的屬性名以及屬性值 java.util.List<Attribute>?bookAttrs?=?book.attributes(); for(Attribute?attr?:?bookAttrs){ System.out.println("屬性名:"?+?attr.getName()?+?"--屬性值:" ?+?attr.getValue()); rbook.setId(attr.getValue()); } //獲取book的子節(jié)點以及其值 Iterator?itt?=?book.elementIterator(); while?(itt.hasNext())?{ org.dom4j.Element?bookChild?=?(org.dom4j.Element)itt.next(); System.out.println("節(jié)點名:"?+?bookChild.getName()?+?"--節(jié)點值:"? +?bookChild.getStringValue()); //根據(jù)子節(jié)點名稱將子節(jié)點的內(nèi)容添加到rbook內(nèi)相應的變量里 switch?(bookChild.getName())?{ case?"title":?rbook.setTitle(bookChild.getStringValue());break; case?"author":?rbook.setTitle(bookChild.getStringValue());break; case?"year":?rbook.setTitle(bookChild.getStringValue());break; case?"price":?rbook.setTitle(bookChild.getStringValue());break; case?"language":?rbook.setTitle(bookChild.getStringValue());break; default:break; } } //將獲得的子節(jié)點加入書單,清除當前實例rbook的內(nèi)容,并打印出書單的內(nèi)容 bookList.add(rbook); rbook?=?null; System.out.println("現(xiàn)在書單里有"?+?bookList.size()?+?"本書"); System.out.println("這本書的ID是:"?+?bookList.get(0).getId()); System.out.println("書名:"?+?bookList.get(0).getTitle()); System.out.println("作者:"?+?bookList.get(0).getAuthor()); System.out.println("======結束遍歷某一本書======"); } }?catch?(DocumentException?e)?{ //?TODO?Auto-generated?catch?block e.printStackTrace(); } } }
運行結果出來,bookList,也就是保存下來的2個實例對象內(nèi)容一樣,而且和子節(jié)點名字不一致。
以下為運行結果
======開始遍歷某一本書======
節(jié)點名:id--節(jié)點值:1
節(jié)點名:title--節(jié)點值:冰與火之歌
節(jié)點名:author--節(jié)點值:喬治馬丁
節(jié)點名:year--節(jié)點值:2009
節(jié)點名:price--節(jié)點值:89
現(xiàn)在書單里有1本書
這本書的ID是:1
書名:89
作者:null
======結束遍歷某一本書======
======開始遍歷某一本書======
節(jié)點名:id--節(jié)點值:2
節(jié)點名:title--節(jié)點值:安徒生童話
節(jié)點名:year--節(jié)點值:1998
節(jié)點名:price--節(jié)點值:22
節(jié)點名:language--節(jié)點值:English
現(xiàn)在書單里有2本書
這本書的ID是:1
書名:89
作者:null
======結束遍歷某一本書======
2016-07-15
剛發(fā)現(xiàn)了,子節(jié)點名字內(nèi)容不一致是因為我在switch語句里用錯了方法,全部用成了setTitle()
現(xiàn)在還有存下來的兩本書都是一樣的的問題。