dom4j的读写xml文件,读写xml字符串
时间:2022-05-04
本文章向大家介绍dom4j的读写xml文件,读写xml字符串,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
百度了一些博客,大同小异,在选取jar包工具的时候大概看了下,大抵是jdom原始,dom4j优秀。于是做了些练习。
参考:http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html
1 package com.test.xml;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.util.List;
7 import java.util.Random;
8
9 import org.dom4j.Document;
10 import org.dom4j.DocumentException;
11 import org.dom4j.DocumentHelper;
12 import org.dom4j.Element;
13 import org.dom4j.io.OutputFormat;
14 import org.dom4j.io.SAXReader;
15 import org.dom4j.io.XMLWriter;
16
17 /**
18 * @ClassName: TestDom4j
19 * @Description:dom4j练习xml的读写
20 * @author mrf
21 * @date 2015-11-11 下午02:25:20
22 *
23 */
24 public class TestDom4j {
25
26 /**
27 * @Title: read
28 * @Description:读取xml文件
29 * @param @param path 参数
30 * @return void 返回类型
31 * @throws DocumentException
32 */
33 public static void read(String path) throws DocumentException{
34 SAXReader saxReader = new SAXReader();
35 Document doc = saxReader.read(new File(path));
36 //获取根元素
37 Element root = doc.getRootElement();
38 System.out.println(root.getName()+root.attributeValue("name"));
39 //获取子元素
40 @SuppressWarnings("unchecked")
41 List<Element> grades = root.elements();
42 if(!grades.isEmpty()){
43 for (int i = 0; i < grades.size(); i++) {
44 Element element = grades.get(i);
45 System.out.println(element.getName()+element.attributeValue("name"));
46 @SuppressWarnings("unchecked")
47 List<Element> classes = element.elements();
48 if(classes.size()>0){
49 for (int j = 0; j < classes.size(); j++) {
50 Element cls = classes.get(j);
51 @SuppressWarnings("unchecked")
52 List<Element> stus = cls.elements();
53 if(!stus.isEmpty()){
54 for (int k = 0; k < stus.size(); k++) {
55 Element stu = stus.get(k);
56 System.out.println(stu.getName()+stu.attributeValue("name"));
57
58 //以下证明elements方法返回值不会为null,另查看源码发现也是直接创建list
59 // List list = stu.elements();
60 // System.out.println(list==null);
61 // System.out.println(list.size());
62 // System.out.println(list);
63 }
64 }
65
66 }
67 }
68 }
69 }
70 }
71
72 /**
73 * @Title: getRandoStr
74 * @Description:获取一个随机字符串
75 * @param @param len
76 * @param @return 参数
77 * @return String 返回类型
78 */
79 public static String getRandoStr(int len){
80 String base = "abcdefghijklmnopqrstuvwxyz1234567890";
81 Random random = new Random();
82 StringBuilder sb = new StringBuilder();
83 for (int i = 0; i < len; i++) {
84 sb.append(base.charAt(random.nextInt(base.length())));
85 }
86
87 return sb.toString();
88 }
89
90 /**
91 * @Title: write
92 * @Description: 测试写一个school文件
93 * @param @throws IOException 参数
94 * @return void 返回类型
95 */
96 public static void write(String path) throws IOException{
97 //创建doc文档
98 Document doc = DocumentHelper.createDocument();
99 Element root = DocumentHelper.createElement("school");
100 //设置根元素
101 doc.setRootElement(root);
102 //添加属性
103 root.addAttribute("name","实验中学");
104 root.addAttribute("position","河北石家庄");
105
106 Element grade = root.addElement("grade");
107 grade.addAttribute("name", "年级");
108 grade.addAttribute("size", "1");
109 Element cls = grade.addElement("class");
110 cls.addAttribute("name", "班级");
111 cls.addAttribute("size", "70");
112 Element stu = cls.addElement("student");
113 stu.addAttribute("name", getRandoStr(4));
114 stu.addAttribute("age", 13+"");
115 stu.addAttribute("sex", new Random().nextInt(2)+"");
116 stu.setText("学生");
117
118 // //添加三个子节点初一初二初三
119 // for (int i = 1; i < 4; i++) {
120 // Element grade = root.addElement("grade");
121 // grade.addAttribute("name", "grade_"+i);
122 // grade.addAttribute("size", "20");
123 // //添加20个班级
124 // for (int j = 1; j < 21; j++) {
125 // Element cls = grade.addElement("class");
126 // cls.addAttribute("name", "grade_"+i+"_class_"+j);
127 // cls.addAttribute("size", "70");
128 // //添加70个学生
129 // for (int k = 1; k < 71; k++) {
130 // Element stu = cls.addElement("student");
131 // stu.addAttribute("name", getRandoStr(4));
132 // stu.addAttribute("age", 12+i+"");
133 // stu.addAttribute("sex", new Random().nextInt(2)+"");
134 // stu.setText("学生");
135 // }
136 // }
137 // }
138
139
140 //输出
141 //控制台
142 new XMLWriter().write(doc);
143
144 //文件
145 //格式 -缩进t true表示换行
146 OutputFormat format = new OutputFormat("t",true);
147 XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);
148 writer.write(doc);
149 writer.flush();
150 writer.close();
151
152 }
153
154 //解析xml字符串
155 public static Document parseStr(String xmlStr) throws DocumentException{
156 Document doc = DocumentHelper.parseText(xmlStr);
157 return doc;
158 }
159
160 public static void main(String[] args) throws IOException, DocumentException {
161 // write("src/main/java/com/test/xml/school.xml");
162
163 read("src/main/java/com/test/xml/school.xml");
164
165 }
166
167 }
- 洛谷P3235 [HNOI2014]江南乐(Multi-SG)
- mail邮件类
- CSS基础语法(一) CSS的3种引入
- php 实现文件下载
- Linux下Sublime Text 2的安装
- php判断客户端UserAgent
- CSS基础语法(二) CSS的9种选择器
- vue表单详解——小白速会
- php curl获取网页内容乱码和获取不到内容的解决方法
- vue组件详解(一)——组件与复用
- 【LeetCode 459】关关的刷题日记42 – Repeated Substring Pattern
- HDU 1848 Fibonacci again and again(SG函数)
- php 分页相关
- 最简单的php导出excel文件方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spark on Kubernetes 动态资源分配
- R语言入门之偏度(skewness)与峰度(kurtosis)
- Spark Operator 是如何提交 Spark 作业
- R语言进阶之聚类分析
- 来 左边 跟我一起画彩虹
- Kubernetes v1.13 对 GPU 的支持
- Spark 3.0 对 GPU 做了什么支持
- Go语言整数值转字符串的效率问题
- R语言进阶之判别分析
- Kubernetes Scheduler Extender浅析
- R语言入门之数据排序、合并、分类汇总
- Tensorflow file_io的用法
- R语言进阶之广义线性回归
- Python函数(二)
- R语言入门之评估假设检验的条件