Dom4j
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dom4j相关的知识,希望对你有一定的参考价值。
一、DOM4j简介
DOM4j是一个简单、灵活的开放源代码的库。DOM4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,DOM4j使用接口和抽象类,虽然DOM4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
DOM4j是一个非常优秀的Java XML API,具有性能优秀、功能强大和极易使用的特点。现在很多软件采用的是DOM4j,例如Hibernate。
使用DOM4j开发,需要下载DOM4j相应的jar文件。
二、DOM4j获取作者的文本内容
book.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Javaweb开发实战</书名> <作者>哈哈</作者> <售价>1.01</售价> <简介>垃圾</简介> </书> <书> <书名>Java基础开发</书名> <作者>呵呵</作者> <售价>0.99</售价> <简介>这非常不错</简介> </书> </书架>
DOM4j解析book.xml
package cn.dom4j; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DOM4jTest { public static void main(String[] args) throws Exception { run(); } /** * 获取第二个作者的名字 */ @SuppressWarnings("unchecked") public static void run() throws Exception { //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,获取DOcument对象 Document document = reader.read("src/book.xml"); //获取根节点--书架 Element root = document.getRootElement(); //获得书的节点,获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //获取作者的节点 Element atutor2 = book2.element("作者"); //获取文本内容 String autor2Name = atutor2.getText(); //输出文本的内容 System.out.println("第二个作者是:"+autor2Name); } }
三、在末尾添加节点
package cn.dom4j; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class DOM4jTest { public static void main(String[] args) throws Exception { add(); } /** * 在第二本下添加节点 */ @SuppressWarnings("unchecked") public static void add() throws Exception{ //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,返回Document对象 Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); //获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //可以直接在第二本书下添加子节点,设置文本内容 book2.addElement("狗").addText("阿拉斯加神狗"); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 获取第二个作者的名字 */ @SuppressWarnings("unchecked") public static void run() throws Exception { //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,获取DOcument对象 Document document = reader.read("src/book.xml"); //获取根节点--书架 Element root = document.getRootElement(); //获得书的节点,获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //获取作者的节点 Element atutor2 = book2.element("作者"); //获取文本内容 String autor2Name = atutor2.getText(); //输出文本的内容 System.out.println("第二个作者是:"+autor2Name); } }
book2.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Javaweb开发实战</书名> <作者>哈哈</作者> <售价>1.01</售价> <简介>垃圾</简介> </书> <书> <书名>Java基础开发</书名> <作者>呵呵</作者> <售价>0.99</售价> <简介>这非常不错</简介> <狗>阿拉斯加神狗</狗> </书> </书架>
四、在指定的位置添加子节点
package cn.dom4j; import java.io.FileOutputStream; 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 { public static void main(String[] args) throws Exception { addToSpecialPosition(); } /** * 在指定的位置添加子节点 * 在第二本的作者之前添加团购价的标签 */ public static void addToSpecialPosition() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); //解析XML Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); //获取书下的所有子节点,返回List集合 List<Element> list = book2.elements(); //创建元素对象 Element GroupPurchasePrice = DocumentHelper.createElement("团购价").addText("0.01"); //list.add(int index,Element element) list.add(1, GroupPurchasePrice); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 在第二本下添加节点 */ @SuppressWarnings("unchecked") public static void add() throws Exception{ //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,返回Document对象 Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); //获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //可以直接在第二本书下添加子节点,设置文本内容 book2.addElement("狗").addText("阿拉斯加神狗"); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 获取第二个作者的名字 */ @SuppressWarnings("unchecked") public static void run() throws Exception { //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,获取DOcument对象 Document document = reader.read("src/book.xml"); //获取根节点--书架 Element root = document.getRootElement(); //获得书的节点,获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //获取作者的节点 Element atutor2 = book2.element("作者"); //获取文本内容 String autor2Name = atutor2.getText(); //输出文本的内容 System.out.println("第二个作者是:"+autor2Name); } }
book3.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Javaweb开发实战</书名> <作者>哈哈</作者> <售价>1.01</售价> <简介>垃圾</简介> </书> <书> <书名>Java基础开发</书名> <团购价>0.01</团购价> <作者>呵呵</作者> <售价>0.99</售价> <简介>这非常不错</简介> </书> </书架>
五、删除和修改文档
package cn.dom4j; import java.io.FileOutputStream; 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 { public static void main(String[] args) throws Exception { deleteSpecialPosition(); } /** * 删除子节点 * 删除第二本下的团购价的标签 */ public static void deleteSpecialPosition() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); //解析XML Document document = reader.read("src/book3.xml"); //获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); Element GroupPurchasePrice = book2.element("团购价"); GroupPurchasePrice.getParent().remove(GroupPurchasePrice); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 在指定的位置添加子节点 * 在第二本的作者之前添加团购价的标签 */ public static void addToSpecialPosition() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); //解析XML Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); //获取书下的所有子节点,返回List集合 List<Element> list = book2.elements(); //创建元素对象 Element GroupPurchasePrice = DocumentHelper.createElement("团购价").addText("0.01"); //list.add(int index,Element element) list.add(1, GroupPurchasePrice); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 在第二本下添加节点 */ @SuppressWarnings("unchecked") public static void add() throws Exception{ //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,返回Document对象 Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); //获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //可以直接在第二本书下添加子节点,设置文本内容 book2.addElement("狗").addText("阿拉斯加神狗"); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 获取第二个作者的名字 */ @SuppressWarnings("unchecked") public static void run() throws Exception { //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,获取DOcument对象 Document document = reader.read("src/book.xml"); //获取根节点--书架 Element root = document.getRootElement(); //获得书的节点,获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //获取作者的节点 Element atutor2 = book2.element("作者"); //获取文本内容 String autor2Name = atutor2.getText(); //输出文本的内容 System.out.println("第二个作者是:"+autor2Name); } }
package cn.dom4j; import java.io.FileOutputStream; 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 { public static void main(String[] args) throws Exception { update(); } /** * 修改文本内容 */ public static void update()throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); //解析XML Document document = reader.read("src/book2.xml"); //获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); //可以直接在第二本书下添加子节点,设置文本内容 book2.element("狗").setText("二哈"); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 删除子节点 * 删除第二本下的团购价的标签 */ public static void deleteSpecialPosition() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); //解析XML Document document = reader.read("src/book3.xml"); //获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); Element GroupPurchasePrice = book2.element("团购价"); GroupPurchasePrice.getParent().remove(GroupPurchasePrice); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 在指定的位置添加子节点 * 在第二本的作者之前添加团购价的标签 */ public static void addToSpecialPosition() throws Exception{ // 获取解析器对象 SAXReader reader = new SAXReader(); //解析XML Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); // 获取第二本书 Element book2 = (Element) root.elements("书").get(1); //获取书下的所有子节点,返回List集合 List<Element> list = book2.elements(); //创建元素对象 Element GroupPurchasePrice = DocumentHelper.createElement("团购价").addText("0.01"); //list.add(int index,Element element) list.add(1, GroupPurchasePrice); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book3.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 在第二本下添加节点 */ @SuppressWarnings("unchecked") public static void add() throws Exception{ //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,返回Document对象 Document document = reader.read("src/book.xml"); //获取根节点 Element root = document.getRootElement(); //获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //可以直接在第二本书下添加子节点,设置文本内容 book2.addElement("狗").addText("阿拉斯加神狗"); //回写 XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"), OutputFormat.createPrettyPrint() ); writer.write(document); writer.close(); } /** * 获取第二个作者的名字 */ @SuppressWarnings("unchecked") public static void run() throws Exception { //获取解析器对象 SAXReader reader = new SAXReader(); //解析XML,获取DOcument对象 Document document = reader.read("src/book.xml"); //获取根节点--书架 Element root = document.getRootElement(); //获得书的节点,获取第二本书 List<Element> books = root.elements("书"); Element book2 = books.get(1); //获取作者的节点 Element atutor2 = book2.element("作者"); //获取文本内容 String autor2Name = atutor2.getText(); //输出文本的内容 System.out.println("第二个作者是:"+autor2Name); } }
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1905320
以上是关于Dom4j的主要内容,如果未能解决你的问题,请参考以下文章
dom4j 不兼容的类型: java.util.List (org.dom4j.Node)无法转换为java.util.List(org.dom4j.Element)