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 ...
随机推荐
- nginx隐藏入口文件index.php
网站的访问url可能是这样http://www.xxx.com/index.php/home/index/index 这种有点不美观,我们想达到如下效果http://www.xxx.com/home/ ...
- Verilog HDL中的运算符关系
1,位运算符 按位运算的运算符是位运算符,原来的操作数有几位,结果就有几位,若两个操作数位数不同,则位数短的操作数左端会自动补0. (1),按位取反:~ (2),按位与:& (3),按位或:| ...
- Java遍历Map对象的方式
public static void main(String[] args) { HashMap<String, String> testMap = new HashMap<> ...
- 采用ddt 可以把ddt获取的数据 塞进测试用例里面的备注里面去展示 (还没有试)
- ORACLE procedure 一个参数分解成多个字符一点建议
测试时给什么变量就会生成什么变量, 但是在PROCEDURE时,你给的变量就会变成去掉包含字符q'/ /' 使用procedure splice添加字符串结果,是不包含q'/.删除时用的riqi赋值语 ...
- Linux背背背(3)
目录 1.文件操作命令 2.文件夹操作命令 文件操作命令 创建 命令:touch 语法:#touch 文件的名字 文件名可以是一个完整的路径 如果后面的参数文件名指定了路径,则表示在指定的路 ...
- linux文件压缩解压命令
01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...
- redis持久化 (rdb
RDB(快照持久化) RDB(redis database),可以理解为快照/内存快照,RDB持久化过程是将当前进程中的数据生成快照存储到硬盘中 触发机制RDB持久化的触发机制分为两种,手动触发和自动 ...
- android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器
BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...
- uva-10400-搜索
题意:题意很简单,就是输入数字,对数字进行加减乘除,然后能不能得到最后的数字. wa了很多次,memcpy(dst,src,sizeof(dst))才对,最后一个参数写错,最后一个参数是要拷贝的字节数 ...