Raven1
2016-07-15 15:47
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文件
//创建SAXreader的对象
SAXReader reader = new SAXReader();
try {
//通过reader对象的read方法加载book.xml文件,获取document对象
org.dom4j.Document document = reader.read(new File("src/res/book.xml"));
//通过document对象获取根节点bookstore
org.dom4j.Element bookStore = document.getRootElement();
//element对象的elementIterator方法获取迭代器
Iterator it = bookStore.elementIterator();
//遍历迭代器,获取根节点中的信息
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的子节点以及其值
Iterator itt = book.elementIterator();
while (itt.hasNext()) {
org.dom4j.Element bookChild = (org.dom4j.Element)itt.next();
System.out.println("节点名:" + bookChild.getName() + "--节点值:"
+ bookChild.getStringValue());
//根据子节点名称将子节点的内容添加到rbook内相应的变量里
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;
}
}
//将获得的子节点加入书单,清除当前实例rbook的内容,并打印出书单的内容
bookList.add(rbook);
rbook = null;
System.out.println("现在书单里有" + 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个实例对象内容一样,而且和子节点名字不一致。
以下为运行结果
======开始遍历某一本书======
节点名:id--节点值:1
节点名:title--节点值:冰与火之歌
节点名:author--节点值:乔治马丁
节点名:year--节点值:2009
节点名:price--节点值:89
现在书单里有1本书
这本书的ID是:1
书名:89
作者:null
======结束遍历某一本书======
======开始遍历某一本书======
节点名:id--节点值:2
节点名:title--节点值:安徒生童话
节点名:year--节点值:1998
节点名:price--节点值:22
节点名:language--节点值:English
现在书单里有2本书
这本书的ID是:1
书名:89
作者:null
======结束遍历某一本书======
刚发现了,子节点名字内容不一致是因为我在switch语句里用错了方法,全部用成了setTitle()
现在还有存下来的两本书都是一样的的问题。
Java眼中的XML---文件读取
83198 学习 · 447 问题
相似问题
回答 1
回答 1