xml文件book.xml
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 出版社="呵呵">
<书名>金瓶梅</书名>
<作者>陈冠希</作者>
<单价>10</单价>
<批发价>20</批发价>
</书>
<书>
<书名>葵花宝典</书名>
<作者>东方不败</作者>
<单价>10</单价>
</书>
</书架>
<hr/>
我们以此为例解析这个xml文件,首先使用DOM4j的两种方式
package com.qianfeng.dom4j;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo1 {
/**
* @param args
* @throws DocumentException
*/
public static void main(String[] args) throws DocumentException {
//使用Dom4j解析Book.xml, 得到第二本书的书名儿
//创建解析器对象
SAXReader reader = new SAXReader();
//得到整个xml文档的Docuemnt对象
Document doc = reader.read("src/Book.xml");
//得到根节点
Element root = doc.getRootElement();
//Element zi = root.element("书");//得到第一个书标签对象
//System.out.println(zi.getName());//得到标签名字
List list = root.elements();//得到根节点的所有子标签节点
Element secondBook = (Element) list.get(1);//得到第二个书标签对象
Element child = secondBook.element("书名");//得到 "书名" 节点对象
System.out.println(child.getText());//得到节点后的文本
}
}
第二种方式
package com.qianfeng.dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Demo2 {
/**
* @param args
* @throws DocumentException
*/
public static void main(String[] args) throws DocumentException {
//使用Dom4j解析Book.xml, 得到所有的标签
SAXReader reader = new SAXReader();
Document doc =reader.read("src/Book.xml");
Element root = doc.getRootElement();
treeWalk(root);
}
private static void treeWalk(Element root) {
System.out.println(root.getName());//显示标签名称
//得到所有的子节点
//root.nodeCount()得到子节点的个数
for(int i=0;i<root.nodeCount();i++)
{
Node node = root.node(i); //根据下标得到一个节点对象
//判断节点类型是不是标签类型
if(node instanceof Element)
{
treeWalk((Element)node);
}
}
}
}
使用XPATH:专门用于查询
//得到第二本书的书名
// SAXReader reader = new SAXReader();
// Document doc = reader.read("src/Book.xml");
//
// Node node = doc.selectSingleNode("/书架/书[2]/书名");
//
// System.out.println(node.getText());
//遍历得到所哟标签
SAXReader reader = new SAXReader();
Document doc = reader.read("src/Book.xml");
List list = doc.selectNodes("//*");
for(int i=0;i<list.size();i++)
{
Node node = (Node) list.get(i);
System.out.println(node.getName());
}