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 }
- 1798: [Ahoi2009]Seq 维护序列seq
- 【LeetCode 389】 关关的刷题日记30 Find the Difference
- 1708: [Usaco2007 Oct]Money奶牛的硬币
- 1856: [Scoi2010]字符串
- 【LeetCode 409】 关关的刷题日记31Longest Palindrome
- Git的奇技淫巧?
- 3224: Tyvj 1728 普通平衡树
- 【LeetCode 136】 关关的刷题日记32 Single Number
- 1599: [Usaco2008 Oct]笨重的石子
- 【LeetCode 136】 关关的刷题日记33 Intersection of Two
- 1218: [HNOI2003]激光炸弹
- Java多线程高并发学习笔记(一)——Thread&Runnable
- 1257: [CQOI2007]余数之和sum
- 【LeetCode 136】 关关的刷题日记34 Intersection of Two Arrays II
- 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 数组属性和方法
- python opencv+pytesseract 验证码识别
- python+opencv 实现图像人脸检测及视频中的人脸检测
- 手搓一个分布式大气监测系统(五)基于物联网开发平台的云架构延伸
- 关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!
- 图解EfficientNet模型的完整细节
- (⊙o⊙)?markdown文档中插入萌萌的emoji表情
- C语言中的字符串可以怎么处理?
- 一个简单的C语言测试框架
- Let's Encrypt实践指北
- MassTransit Get Started->
- 一次性把所有普通和经典的网页布局讲得通通透透的,多图预警,建议收藏
- Github标星 8K+,免费又好用的Redis客户端工具!
- Python判断字符串是否包含特定子串的7种方法
- 用后台开发的逻辑理念学习VUE
- 进程管理-Linux每日一练(6)