慕粉0810224052
把上面import引入的
org.jdom.Attribute;
删除,然后重新引入dom4j
慕圣0830664
百度啊。。。。。


慕粉4407418
或许可以尝试写一个递归来不断获取子节点,直到获取最下面的叶子节点
把心刘
这个是Java awt组件里面的包,你要导入的是你自己建立的Book类对象所在的包。
大LOVE辉
这两个getName()是不同的,第一个是Attribute类的getName()方法,第二个是Element类的getName()方法
如果你想输出book节点名,可以用book.getName()输出
霸道的樱木
在这里的效果是一样的,在实际应用的时候可以根据自己的需求选择这两种方式
玄鉴
package com.test;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class DOM4JTest {
private static List<Book> books = new ArrayList<Book>();
public static void main(String[] args) {
// 解析books.xml
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File("src/res/books.xml"));
Element bookStore = document.getRootElement();
Iterator it = bookStore.elementIterator();
while(it.hasNext()){
Book bookEntity = new Book();
Element book = (Element)it.next();
List<Attribute> bookAttrs = book.attributes();
for (Attribute attr : bookAttrs) {
System.out.println(attr.getName()+"->"+attr.getValue());
if(attr.getName().equals("id")){
bookEntity.setId(attr.getValue());
}
}
Iterator itt = book.elementIterator();
while(itt.hasNext()){
Element bookChild = (Element)itt.next();
System.out.println(bookChild.getName()+"->"+bookChild.getStringValue());
switch (bookChild.getName()) {
case "name":
bookEntity.setName(bookChild.getStringValue());
break;
case "author":
bookEntity.setAuthor(bookChild.getStringValue());
break;
case "year":
bookEntity.setYear(bookChild.getStringValue());
break;
case "price":
bookEntity.setPrice(bookChild.getStringValue());
break;
case "language":
bookEntity.setLanguage(bookChild.getStringValue());
break;
default:
break;
}
}
books.add(bookEntity);
bookEntity=null;
System.out.println("--------------------------------");
}
for (Book book : books) {
System.out.println(book.toString());
System.out.println("--------------------------------");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
精慕门7312623
list = document.selectNodes("/bookstore/book")
可以使用这样的方式获取子节点,比如这种就是获得所有的bookstore节点下的所以book节点
慕粉_sunshine
空指针异常
K_F_C
没区别,不同方法而已,殊途同归
qq_白衣卿相_3
上面通过book.attributes();获得的是属性值,在本节也就是id,而它的子节点下面是没有任何属性值的,所以肯定得到的是空的