dom4j解析XML学习
原理:把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();
}
}
}
最新文章
- caffe中卷积层和pooling层计算下一层的特征map的大小
- 数组循环:循环多个li 每个li 固定N条数据
- MySql的count统计结果
- UDP-C#代码
- mysqldump的流程
- HDU 1330 Nearest Common Ancestors(求两个点的近期公共祖先)
- OC学习总结之面向对象和类
- 最小生成树——[HAOI2006]聪明的猴子
- C#中的switch case
- JenKins 环境搭建 for Centos6.5
- sql中int字段实现百分比
- python爬虫提取冰与火之歌五季的种子
- 【转】CSS中的浮动和清除浮动
- Java I/O : Java中的进制详解
- 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)
- 1768:最大子矩阵(NOIP2014初赛最后一题)
- UVa 11292 勇者斗恶龙
- python之多进程multiprocessing模块
- (转)JSON Web Token - 在Web应用间安全地传递信息
- ORA-01033: ORACLE initialization or shutdown in progress --手动删除表空间 DBF 后无法登陆问题
热门文章
- js中function (res) {}与(res) =>{}的区别
- 华为C/C++编码规范+《数学之美》感想
- 论文解读(DeepWalk)《DeepWalk: Online Learning of Social Representations》
- 大爽Python入门教程 3-3 循环:`for`、`while`
- CTF入门学习2->;Web基础了解
- [atAGC045E]Fragile Balls
- FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口
- html+css第七篇-表格
- [NOIP2017 提高组] 宝藏
- [NOI Online #3 提高组] 魔法值