准备:dom4j的jar包
对于DOM4j的浅显的感知:
解析xml文件,在对于子节点中有子节点的情况,则要提前知道该节点的名称
dom4j将返回对象封装成 list 对象 或者 迭代的对象,方便获取相关的值
java代码:
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jXmlTest {
public static void main(String[] args){
try{
File f = new File("books.xml"); //转换成 File对象
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(f); //返回的是DefaultDocument的对象--过程间创建了 Element[] stack = new Element[50];
Element root = doc.getRootElement(); //因此返回的结果都在 Element 数组对象中
Element foo;
//1、使用迭代器遍历
/*for(Iterator i = root.elementIterator("book");i.hasNext();){
foo = (Element)i.next();
System.out.println("值:"+foo.elementText("year"));
for(Iterator j = foo.elementIterator("paper");j.hasNext();){
//遍历里面节点的子节点,
foo = (Element)j.next();
System.out.println("count值:"+foo.elementText("count"));
}
}*/
//2、使用list对象遍历
List<Element> list = root.elements("book");
for(Element obj : list){
System.out.println(obj.elementText("name"));
List<Element> paper = obj.elements("paper"); //获取子节点中的子节点
for(Element child : paper){
System.out.println(child.getName()); //返回的 paper。
System.out.println("count值:"+child.elementText("count"));
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
xml文件格式:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book >
<name>父与子</name>
<author>劳恩</author>
<year>2016</year>
<price>23</price>
<paper >
<jiage>
<meike>22</meike>
<result>33</result>
</jiage>
<count>24</count>
</paper>
</book>
<book >
<name>父与子</name>
<author>劳恩</author>
<year>2017</year>
<price>23</price>
</book>
</bookstore>