在官网https://dom4j.github.io/下载最新的dom4j的jar包,以及配合xpath解析的http://central.maven.org/maven2/jaxen/jaxen/1.1.6/的jaxen.jar包。

总的来说其实要掌握的是,node和element和attribute的使用,以及一些迭代器配合。下面展示示例代码。具体演示了xml的增删改查的操作。

package Day04;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test; public class XmlDemo {
private void documentToFile(Document doucument,String charsetName) throws Exception {
FileOutputStream fileWiter = new FileOutputStream("src/book.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new OutputStreamWriter(fileWiter,charsetName), format);
writer.write( doucument );
writer.close();
}
@Test
public void CreateXml() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("书店");
Element cateGrayElement1 = root.addElement("分类").addAttribute("descript", "童话故事");
Element cateGrayElement2 = root.addElement("分类").addAttribute("descript", "IT技术刊"); Element bookElement1 = cateGrayElement1.addElement("书");
bookElement1.addElement("书名").addText("格林童话");
bookElement1.addElement("国家").addText("非中");
Element bookElement2 = cateGrayElement1.addElement("书");
bookElement2.addElement("书名").addText("愚公移山");
bookElement2.addElement("国家").addText("中国");
Element bookElement3 = cateGrayElement2.addElement("书");
bookElement3.addElement("书名").addText("Tcp/ip 详解");
bookElement3.addElement("国家").addText("非中");
Element bookElement4 = cateGrayElement2.addElement("书");
bookElement4.addElement("书名").addText("c语言入门");
bookElement4.addElement("国家").addText("中国");
try {
documentToFile(document,"UTF-8");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void treeWalk(Document document) {
treeWalk(document.getRootElement());
} public void treeWalk(Element element) {
for (int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
if (node instanceof Element) {
String name = node.getName();
switch(name) {
case "分类":System.out.println(name+"(descript="+((Element) node).attributeValue("descript")+")");break;
case "书":System.out.println("\t"+name);break;
default:System.out.println("\t\t"+name+" "+node.getText());
}
treeWalk((Element) node);
}
else {
// do something…
}
}
}
/*
* 递归输出xml
*/
@Test
public void loopXml() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
treeWalk(document);
} /**
* 利用xpath语法 获取属性和节点
*/
@Test
public void xpath() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
System.out.println("----------------------获取属性---------------------------------");
List<Node> attrlists = document.selectNodes("//@descript");
Iterator<Node> attrIt = attrlists.iterator();
while(attrIt.hasNext()) {
Attribute attr = (Attribute)attrIt.next();
System.out.println("分类的"+(attr).getName()+"="+attr.getData());
}
System.out.println("----------------------获取节点---------------------------------");
List<Node> lists = document.selectNodes("//书");
Iterator<Node> it = lists.iterator();
while(it.hasNext()) {
//获取子类值
Node node = it.next();
for (Iterator<Element> bookIt = ((Element)node).elementIterator(); bookIt.hasNext();) {
Element element = bookIt.next();
System.out.println(element.getName()+":"+element.getText());
// do something
}
} System.out.println("-----------------------获取属性的节点--------------------------------");
List<Node> attrlists1 = document.selectNodes("//分类[@descript=\"童话故事\"]");
Iterator<Node> attrIt1 = attrlists1.iterator();
while(attrIt1.hasNext()) {
//获取子类值
Element cateElement = (Element)attrIt1.next();
System.out.println(cateElement.getName()+"attributes:descript="+cateElement.attribute("descript").getValue());
}
} /**
* 演示插入,在愚公移山书名后加一个简介(指定位置插入)
*/
@Test
public void insert() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
//找到第二本书//分类[@descript="童话故事"]/书[2]
Node pNode = document.selectSingleNode("//分类[@descript=\"童话故事\"]/书[2]");
List<Element> list = ((Element)pNode).elements();
Element addNode = DocumentHelper.createElement("简介");
addNode.addText("《愚公移山》是战国时期思想家列子创作的一篇寓言小品文。文章叙述了愚公不畏艰难,坚持不懈,挖山不止,最终感动天帝而将山挪走的故事。");
list.add(1, addNode);
System.out.println(list.toArray());
try {
documentToFile(document,"UTF-8");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 修改xml元素
*/
@Test
public void update() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
//找到要修改的节点,比如我现在想给愚公移山这个书名加上书名号
Node pNode = document.selectSingleNode("//分类[@descript=\"童话故事\"]/书[2]/书名");
pNode.setText(new StringBuffer().append("《").append(pNode.getText()).append("》").toString());
try {
documentToFile(document,"UTF-8");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 删除,刚刚添加的愚公移山的简介
*/
@Test
public void delete() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
//找到要修改的节点,比如我现在想给愚公移山这个书名加上书名号
Node pNode = document.selectSingleNode("//分类[@descript=\"童话故事\"]/书[2]/简介");
((Element)pNode).getParent().remove(pNode);
try {
documentToFile(document,"UTF-8");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

dom4j 操作总结的更多相关文章

  1. Strus2第一次课:dom4j操作xml

    先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; ...

  2. xml解析 使用dom4j操作xml

     使用dom4j操作xml 1 导入 dom4j,的jar包   2 指定要解析的XML文件 SAXReader sr=new SAXReader(); Document document= sr.r ...

  3. Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath

    转: Dom4j 操作, 节点查找 添加 删除 修改 ...xPath 2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多 个人分类: JavaWeb   版权声明:本文为博 ...

  4. DOM4J操作XML(包括封装和解析)

    DOM4J操作XML(包括封装和解析) 先来看看dom4j中相应XML的DOM树建立的继承关系 针对于XML标准定义.相应于图2-1列出的内容,dom4j提供了下面实现: 以下给出一个详细事例: pa ...

  5. 使用dom4j操作XML

    DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...

  6. XML学习笔记(2)--dom4j操作XML

    1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...

  7. dom4j操作xml文档

    java Dom4j解析XML文件 标签(空格分隔):java进阶 xml文档: <?xml version="1.0" encoding="UTF-8" ...

  8. dom4j操作xml的demo

    package com.cn.shop.util; import java.io.File;import java.io.FileOutputStream;import java.io.OutputS ...

  9. Dom4j操作XML实战,解析和插入XML实例

    本例子是用XML来代替数据库的,XML的每个节点代替数据库一行数据. 直说过程: XML文件结构:定义了一个名为:User.xml的文件: <?xml version="1.0&quo ...

随机推荐

  1. 【C++】vector用法详解

    转自:https://blog.csdn.net/fanyun_01/article/details/56842637#commentBox 一.简介 C++ vector类为内置数组提供了一种替代表 ...

  2. SpringCloud和Springboot

    SpringBoot+SpringCloud+SpringMVC+SpringData 我们把这种架构也称之为spring全家桶 什么是SpringCloudSpring Cloud是一系列框架的有序 ...

  3. 知识点:Mysql 基本用法之存储过程

    存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...

  4. nodejs通过mocha处理运行文件路径下所有js文件

    1.获取文件路径: 方式一:整个js文件使用 var path=require('path');var public_path=path.resolve('../testcase/listData/* ...

  5. suricata HTTP关键字

    http request http request请求包括请求行.请求头.空行和内容.一个普通的request请求如下: http response http response应答包括应答行,头部,空 ...

  6. 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

    一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...

  7. mac无密登陆到linux

    最近弄了台linux云服务器,然而每次登陆linux都好麻烦,所以倒腾了下ssh无密登陆. linux:centos 6.5,自带ssh mac:yosemite,自带ssh 步骤: 1. 创建key ...

  8. 对象转Json时,Date类型格式化问题

    object是一个对象,该对象中有一个字段为Date类型 使用JSONObject obj = JSONObject.fromObject(object);将Object转成json时 Date类型字 ...

  9. python,关于用户登录与注册问题

    tag=Truecount=1while tag: name = input('请输入用户名>>:').strip() password = input('请输入密码>>:') ...

  10. vue单页面处理SEO问题

    设置vue 单页面meta info信息 vue-meta-info,(https://github.com/muwoo/vue-meta-info)如果需要单页面SEO,可以和 prerender- ...