原理:把dom与SAX进行了封装

优点:JDOM的一个智能分支。扩充了其灵活性增加了一些额外的功能。

package com.dom4j.xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

import com.sun.beans.decoder.DocumentHandler;

public class dom4j {
public static void main(String[] args) throws Exception {
//创建SAXReader对象
SAXReader reader= new SAXReader();
//reader方法读取一个文件,转换成doucment对象
Document document= reader.read("src/NewFile.xml");
//获取根节点元素对象
Element nodeRoot= document.getRootElement();
//遍历所有的元素节点
listNodes(nodeRoot);
}
public static void listNodes(Element node){
//System.out.println("当前节点名称:"+node.getName());
//获取当前节点的所有属性节点
List<Attribute> list= node.attributes();
//遍历属性节点
for (Attribute attr : list) {
System.out.println(attr.getName()+":"+attr.getValue());
}
//遍历node节点下面的所有子元素节点
Iterator<Element> it= node.elementIterator();
while(it.hasNext()){
// 获取某个子节点对象
Element e = it.next();
if(e.elements().size()==0){
System.out.println(e.getName()+":"+e.getStringValue());
}
//递归遍历元素节点
listNodes(e);
}
}
@Test
public void creatXML(){
//创建saxreader对象
SAXReader reader = new SAXReader();
//创建根节点
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
Element stu= root.addElement("student");
stu.addAttribute("id", "001");
stu.addElement("name","张三");
stu.addElement("sex","男");
stu.addElement("age","20");
//
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
//排版
OutputFormat format= OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer;
try {
writer = new XMLWriter(new FileOutputStream("src/stu.xml"),format);
writer.write(document);
writer.flush();
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
}

最新文章

  1. caffe中卷积层和pooling层计算下一层的特征map的大小
  2. 数组循环:循环多个li 每个li 固定N条数据
  3. MySql的count统计结果
  4. UDP-C#代码
  5. mysqldump的流程
  6. HDU 1330 Nearest Common Ancestors(求两个点的近期公共祖先)
  7. OC学习总结之面向对象和类
  8. 最小生成树——[HAOI2006]聪明的猴子
  9. C#中的switch case
  10. JenKins 环境搭建 for Centos6.5
  11. sql中int字段实现百分比
  12. python爬虫提取冰与火之歌五季的种子
  13. 【转】CSS中的浮动和清除浮动
  14. Java I/O : Java中的进制详解
  15. 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)
  16. 1768:最大子矩阵(NOIP2014初赛最后一题)
  17. UVa 11292 勇者斗恶龙
  18. python之多进程multiprocessing模块
  19. (转)JSON Web Token - 在Web应用间安全地传递信息
  20. ORA-01033: ORACLE initialization or shutdown in progress --手动删除表空间 DBF 后无法登陆问题

热门文章

  1. js中function (res) {}与(res) =>{}的区别
  2. 华为C/C++编码规范+《数学之美》感想
  3. 论文解读(DeepWalk)《DeepWalk: Online Learning of Social Representations》
  4. 大爽Python入门教程 3-3 循环:`for`、`while`
  5. CTF入门学习2-&gt;Web基础了解
  6. [atAGC045E]Fragile Balls
  7. FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口
  8. html+css第七篇-表格
  9. [NOIP2017 提高组] 宝藏
  10. [NOI Online #3 提高组] 魔法值