1、新建web工程,在工程右键Buid Path--Configure Buid Path中导入外部dom4j-1.6.1.jar包,同时将其复制到可被servlet找到的 WebContent / WEB-INF/ lib 下
2、在jsp中需要导入要用到的java类的包或类本身,如在标签中写java 语句也需要导入用到的类
3、解析xml文件时,目前需要在解析类中写 xml文件的绝对路径,服务器才可以运行,有待解决
4、package com.topo.dom4j;
import java.io.File;
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;
import com.topo.data.Book;
/**
* DOM4J 方式解析XML
*/
public class DOM4J {
public static DOM4J dom;
public static Book books = new Book(); //这样在类中创建静态属性,这样在jsp中创建实例后,在该web工程在服务器上发布时就在后台运行了这个实例,得到了数据结构,前端只是读取
static{
dom = new DOM4J();
dom.readBookByDOM();
}
//public void readBookByDOM(File dest) {
public Book readBookByDOM() {
// 解析books.xml文件
// 创建SAXReader的对象reader
SAXReader reader = new SAXReader();
try {
// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。
//Document document = reader.read(dest);
//Document document = reader.read(new File("/WebContent/books.xml"));
Document document = reader.read(new File("D:/Program Files/eclipse/workspace/TOPO/WebContent/books.xml"));
// 通过document对象获取根节点bookstore
Element bookStore = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
Iterator it = bookStore.elementIterator();
// 遍历迭代器,获取根节点中的信息(书籍)
while (it.hasNext()) {
System.out.println("=====开始遍历某一本书=====");
Element book = (Element) it.next();
// 获取book的属性名以及 属性值
List<Attribute> bookAttrs = book.attributes();
for (Attribute attr : bookAttrs) {
System.out.println("属性名:" + attr.getName() + "--属性值:" + attr.getValue());
books.getId().add(attr.getValue());
}
//解析子节点的信息
Iterator itt = book.elementIterator();
while (itt.hasNext()) {
Element bookChild = (Element) itt.next();
if(bookChild.getName()=="name"){
books.getName().add(bookChild.getStringValue());
}
else if(bookChild.getName()=="author"){
books.getAuthor().add(bookChild.getStringValue());
}
else if(bookChild.getName()=="year"){
books.getYear().add(bookChild.getStringValue());
}
else if(bookChild.getName()=="price"){
books.getPrice().add(bookChild.getStringValue());
}
System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue());
}
System.out.println("=====结束遍历某一本书=====");
}
} catch (DocumentException e) {
e.printStackTrace();
}
return books;
}
}