import java.io.File;
import java.util.Iterator;
import org.dom4j.*;
import org.dom4j.io.*;
/**
* 利用DOM4J API读入XML文件. src/book.xml
*/
/**
* 读book.xml:
* 1)获取到Document对象
* 2)获取到RootElement
* 3)获取根元素的子元素集合
* 4)遍历子元素集合,每个元素再取子元素集合
* 5)重复第4步.直到叶子元素.
* */
public class ReadXMLDemo {
public static void main(String[] args) {
String filename = "src/day1/book.xml";
readXml(filename);
}
private static void readXml(String filename) {
//定义解析器
//文件的解析有两种方式,DOM(Document Object Model)和SAX( Simple API for XML)
//DOM是先装载到内存中,完成后才开始解析,有内存压力大、时间延迟的缺点。
//SAX立即开始解析,适合大文件的解析。
SAXReader reader = new SAXReader();
try {
//开始解析,返回文档对象
Document doc = reader.read(new File(filename));
//获取根元素
Element root = doc.getRootElement();
// 迭代
Iterator it = root.elementIterator("武侠小说");
while(it.hasNext()){//如果仍有元素可以迭代,则返回 true。
//武侠小说元素
Element elmt = (Element) it.next();
//书名元素
Element elmtBookname = elmt.element("书名");
//获得书名的内容
String name = elmtBookname.getText();
//获得书名元素中的属性
Iterator attrs = elmtBookname.attributeIterator();
//获得书名元素的属性集合
while(attrs.hasNext()){
//书名元素的每一组属性
Attribute attr = (Attribute)attrs.next();
//打印书名元素的每一组属性
System.out.println(attr.getName()+"="+attr.getValue());
}
System.out.println(name);
System.out.println(elmt.elementText("出版时间"));
System.out.println(elmt.elementText("Email"));
System.out.println(elmt.elementText("Phone"));
System.out.println(elmt.elementText("价格"));
System.out.println(elmt.elementText("简介"));
Iterator authorsIt = elmt.elementIterator("作者");
while(authorsIt.hasNext()){
Element author = (Element)authorsIt.next();
System.out.println(author.getText());
}
System.out.println("----------------");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}