在官网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. Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'

    错误: Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success 'if ...

  2. VS2010+WPF+LINQ for MySQL

    学习wpf,连接数据库和linq for mysql 1.参考以前博文,恢复在 Vs2010+linQ for Mysql的环境. 2.建立 wpf工程,参照1,生成 datacontext.cs , ...

  3. [转]使用python爬取东方财富网机构调研数据

    最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了 ...

  4. [UE4]CheckBox

    一.CheckBox默认情况下是比较小的 二.要让CheckBox变大,最简单的方法就是直接设置Transform.Scale,但如此一来CheckBox就变得模糊了. 三.CheckBox控件是在C ...

  5. Deployment Descriptor Web.xml

    Deployment Descriptor部署描述符: - 部署描述符是要部署到Web容器或EJB容器的Web应用程序或EJB应用程序的配置文件. - 部署描述符应包含EJB应用程序中所有企业bean ...

  6. Vue 封装的loading组件

    <template> <div class="loadEffect"> <span></span> <span>< ...

  7. python初接触

    浑浑噩噩的过了3年多大学生涯,就借此开始下定决心好好的学好一门技术,为心中那个游戏梦而努力. 正式开课的第一天(也算不的吧,毕竟昨天老师也和我们讲了python课程的大纲内容).自我总结下今天的内容吧 ...

  8. DeepLearning初窥门径

    说明: 最近在看Ng的DL课程,感觉说的非常好,浅显易懂! 本来打算记录一下自己的学习过程,网上几个大神总结的太完美了,根本没必要自己去写了,而且浪费时间~~ 网易地址:http://mooc.stu ...

  9. 批量IP自动netcat脚本

    批量IP自动netcat脚本nc.sh 在同一目录新建一个名为ncip的文件,并以每行一个IP的方式罗列.使用sh命令执行nc.sh.此例中是测试22端口访问情况. #!/bin/bash IP_LI ...

  10. list按照某个元素进行排序

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...