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()); }
相关文章推荐
- 使用IntelliJ IDEA配置Erlang开发环境
- 数组队列
- servlet 之request
- Linux系统构架 - HA集群配置
- JVM学习04-class字节码的结构
- BZOJ 1449/2895: [JSOI2009]球队收益|网络流
- NSFileHandle的使用
- 多线程开发之线程的超时
- 【慕课笔记】第四章 流程控制语句 第9节 JAVA循环跳转语句之break
- shell脚本读取按行读取文本
- 单链表基本操作
- ASP.NET 日志
- 机器学习公开课笔记(8):k-means聚类和PCA降维
- mysql数据迁移到mongodb之工具迁移
- 网站攻防
- SQLite
- 如何让软件绑定计算机硬件
- 关于Oracle数据库的用户权限问题补充
- linux字符设备驱动程序(一)----------分配设备号并注册设备
- KMP 模式串匹配算法