dom4j 操作总结
在官网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 操作总结的更多相关文章
- Strus2第一次课:dom4j操作xml
先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; ...
- xml解析 使用dom4j操作xml
使用dom4j操作xml 1 导入 dom4j,的jar包 2 指定要解析的XML文件 SAXReader sr=new SAXReader(); Document document= sr.r ...
- Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath
转: Dom4j 操作, 节点查找 添加 删除 修改 ...xPath 2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多 个人分类: JavaWeb 版权声明:本文为博 ...
- DOM4J操作XML(包括封装和解析)
DOM4J操作XML(包括封装和解析) 先来看看dom4j中相应XML的DOM树建立的继承关系 针对于XML标准定义.相应于图2-1列出的内容,dom4j提供了下面实现: 以下给出一个详细事例: pa ...
- 使用dom4j操作XML
DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...
- XML学习笔记(2)--dom4j操作XML
1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...
- dom4j操作xml文档
java Dom4j解析XML文件 标签(空格分隔):java进阶 xml文档: <?xml version="1.0" encoding="UTF-8" ...
- dom4j操作xml的demo
package com.cn.shop.util; import java.io.File;import java.io.FileOutputStream;import java.io.OutputS ...
- Dom4j操作XML实战,解析和插入XML实例
本例子是用XML来代替数据库的,XML的每个节点代替数据库一行数据. 直说过程: XML文件结构:定义了一个名为:User.xml的文件: <?xml version="1.0&quo ...
随机推荐
- docker4种网络最佳实战 --摘自https://www.cnblogs.com/iiiiher/p/8047114.html
考: http://hicu.be/docker-container-network-types docker默认3中网络类型 参考: https://docs.docker.com/engine/u ...
- 使用setup.py安装python包和卸载python包的方法
使用setup.py安装python包和卸载python包的方法 记录安装后文件的路径 python setup.py install --record files.txt删除这些文件 cat fil ...
- 【python】参数中的*args和**kwargs
转自https://www.cnblogs.com/xuyuanyuan123/p/6674645.html#undefined 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照 ...
- Delphi 10-10.2.2启动提示JS错误的解决办法
HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\18.0\Known IDE Packages\ $(BDS)\Bin\CommunityToolbar240.b ...
- SQL 语句 explain 分析
分析索引的效率: > EXPLAIN sql; EXPLAIN 分析的结果的表头如下: id | select_type | table | partitions | type | poss ...
- 不常用的vi命令
vi u 撤回ctrl+r 撤回的撤回 全文替换%s/old/new/g 指定行区间替换12,15s/old/new/g c替换前确认12,15s/old/new/gc 用#代替分隔符,用户关键字有/ ...
- centos7安装 owncloud注意事项
要关于selinux 用来存放文件的目录权限要修改 chown -R apache:apache my.cnf里的binlog_format=mixed前面的注释去掉,不然报mysql错!
- Container 、Injection
Container: Linux容器作为一类操作系统层面的虚拟化技术成果,旨在立足于单一Linux主机交付多套隔离性Linux环境.与虚拟机不同,容器系统并不需要运行特定的访客操作系统.相反,容器共享 ...
- Java选择排序,插入排序,快速排序
public class Test { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5 }; 选择排序(a); ...
- oracle入坑日记<一> 安装
学习日记系列(前辈/大神勿喷) 一.下载 下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads ...