在官网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. [JAVA]JAVA多线程实现方法之——实现Runnable接口

    public class MultiThread { public static void main(String[] args) { Thread t1 = new Thread(new Threa ...

  2. xshell 显示中文

    xshell 可能无法正常显示中文,即使选择了utf-8编码也不生效. 1:输入:echo $LANG 显示:en_US.UTF-8 2.输入:export LANG=zh_CN.UTF-8 3. 输 ...

  3. powershell中设置变量并启动Tomcat

    假设tomcat安装在 C:\GreenSoftware\apache-tomcat-9.0.14 目录. 使用powershell进入到此目录.执行命令 $Env:JAVA_HOME="C ...

  4. Pycharm 设置上下左右快捷键

    Pycharm的版本 Note:英文版的Pycharm,使用中文版的对照即可. 1. 打开Pycharm软件→File→Settings 2.Keymap→Editor Actions→搜索(up)→ ...

  5. idea本地跑代码和链接开发机设置

  6. win7 64 位 + vs2015 + opencv3.2

    下载OpenCv_3.2_vc14 链接:http://pan.baidu.com/s/1eSBu1NG 密码:104g 1.下载好后,进行解压到自己指定的目录: 解压后可以得到: 2.添加环境变量 ...

  7. 让UITableView的section header view不悬停的方法

    当 UITableView 的 style 属性设置为 Plain 时,这个tableview的section header在滚动时会默认悬停在界面顶端.取消这一特性的方法有两种: 将 style 设 ...

  8. Xeon Phi 《协处理器高性能编程指南》随书代码整理 part 1

    ▶ 第三章,逐步优化了一个二维卷积计算的过程 ● 基准代码 #include <stdio.h> #include <stdlib.h> #include <string ...

  9. background-position,有逗号和没逗号:截然不同的结果

    写星级评分demo的时候,发现background-position这个属性有点神奇 如上图,在其值中加“,”与不加“,”会带来截然不同的结果,来研究一哈,顺便把这个属性复习一下 1.backgrou ...

  10. 富文本编辑器Ueditor 及 hibernate 逆向工程

    1.1           富文本编辑器Ueditor ueditor下载地址: http://ueditor.baidu.com/ 下载1.4.3 –utf8-Jsp版本.完整demo可参考下载文件 ...