您的位置:首页 > 其它

DOM4J的解析方式

2016-01-20 21:30 357 查看

1. DOM4J的简介:

1. Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,Dom4j使用接口和抽象基类,虽然 Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。

2. Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

3. 使用Dom4j开发,需下载dom4j相应的jar文件。

2.DOM4J的解析(必须会,企业中用的多)

1* 先下载DOM4J相应的jar包。导入工程中,才能使用。

2* 把dom4j-1.6.1.jar导入到工程中。

3* WEB项目:复制dom4j-1.6.1.jar到 WebRoot -- WEB-INF -- lib里面。就ok。

4.代码示例:

book2.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架>
<书>
<书名>javaweb开发大全</书名>
<作者>班长</作者>
<售价>99.8元</售价>
<简介>这是不错啊</简介>
</书>
<书>
<书名>葵花宝典</书名>
<狗>小狗</狗>
<作者>岳不群</作者>
<售价>99.8两</售价>
<简介>欲练此功...</简介>
</书>
</书架>


java代码:

package cn.itcast.dom4j;

import java.io.FileWriter;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class DOM4jTest {

/**
* @param args
*/
public static void main(String[] args) {

try {
run5();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 修改文本内容:修改狗的内容
*/
public static void run5() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回document对象
Document document = reader.read("src/book2.xml");
//获取document对象的根节点(书架标签)
Element root = document.getRootElement();
Element book2 = (Element) root.elements("书").get(1);
Element dog = book2.element("狗");
dog.setText("小狗");

//回写才能写回xml
//创建漂亮的格式
OutputFormat format = OutputFormat.createPrettyPrint();
//回写类
XMLWriter writer = new XMLWriter( new FileWriter("src/book2.xml"), format);
//回写到文档
writer.write(document);
writer.close();
}

/**
* 删除子结点:猫
*/
public static void run4() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回document对象
Document document = reader.read("src/book2.xml");
//获取document对象的根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书
Element book2 = (Element) root.elements("书").get(1);
Element cat = book2.element("猫");
//通过猫获取父结点
//cat.getParent();
//通过父节点删除猫
book2.remove(cat);
//回写才能写回xml
//创建漂亮的格式
OutputFormat format = OutputFormat.createPrettyPrint();
//回写类
XMLWriter writer = new XMLWriter( new FileWriter("src/book2.xml"), format);
//回写到文档
writer.write(document);
writer.close();

}

/**
* 在第二本书的作者标签之前添加团购价标签(任意结点前添加)
* @throws Exception
*/
public static void run3() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回document对象
Document document = reader.read("src/book2.xml");
//获取document对象的根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//获得书下的所有子结点,返回list集合
List <Element> list = book2.elements();
//创建元素对象 DocumentHelper.createElement();
Element dog = DocumentHelper.createElement("狗");
dog.setText("大狗");
//list.add(index, Element);
list.add(1, dog);
//回写才能写回xml
//创建漂亮的格式
OutputFormat format = OutputFormat.createPrettyPrint();
//回写类
XMLWriter writer = new XMLWriter( new FileWriter("src/book2.xml"), format);
//回写到文档
writer.write(document);
writer.close();

}

/**
* DOM4J  添加子结点
* @throws Exception
*/
public static void run2() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回document对象
Document document = reader.read("src/book2.xml");
//获取document对象的根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书
Element book2 = (Element) root.elements("书").get(1);
//可以直接在第二本书下添加子结点,设置文本内容
book2.addElement("猫").setText("我是猫");

//回写才能写回xml
//创建漂亮的格式
OutputFormat format = OutputFormat.createPrettyPrint();
//回写类
XMLWriter writer = new XMLWriter( new FileWriter("src/book2.xml"), format);
//回写到文档
writer.write(document);
writer.close();

}

/**
* 获取第二本书作者的文本内容
* 操作过程是:书的树形从根节点不断向下获取
* @throws Exception
*/
public static void run1() throws Exception{
//先获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回document对象
Document document = reader.read("src/book2.xml");
//获取document对象的根节点(书架标签)
Element root = document.getRootElement();
//获取书结点,获取第二本书
List<Element>  books = root.elements("书");
Element book2 = books.get(1);
//获取作者的标签
Element author2 = book2.element("作者");
//获取文本内容
System.out.println(author2.getText());
}

}//end class


3.DOM4J对XPATH的支持

1* 导入包。jaxen-1.1-beta-6.jar。

2* 怎么使用?(只能使用这两方法)

selectNodes("/AAA") 返回集合

selectSingleNode() 一个Node对象

3* 参数就是xpath的语法

1 /AAA/BBB 获取BBB的节点

2 //BBB 无论层级关系,找到BBB的节点

3 * 代表是所有

4 /AAA/BBB[1] 找到BBB的第一个 /AAA/BBB[last()] 最后一个

5 @ 属性

4.代码示例:

/**
* 对XPATH的支持
* @throws Exception
*/
public static void run6() throws Exception{
// 获取解析器对象
SAXReader reader = new SAXReader();
// 解析XML
Document document = reader.read("src/book2.xml");
// List<Node> list = document.selectNodes("/书架/书/作者");
List<Node> list = document.selectNodes("//作者");
Node author2 = list.get(1);
System.out.println(author2.getText());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: