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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏彭湖湾的编程世界

【算法】先生,您点的查找套餐到了(二分、插值和斐波那契查找)

参考资料 《算法(java)》                           — — Robert Sedgewick, Kevin Wayne 《数据结...

1979
来自专栏HansBug's Lab

2751: [HAOI2012]容易题(easy)

2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1087 ...

1925
来自专栏专注 Java 基础分享

Java 字符流操作

     上篇文章Java 字节流操作介绍了java中基本的字节流操作,但是我们常常对于字符操作,如果使用字节流来实现输入输出就显得麻烦,我们可以使用字符流...

1937
来自专栏一个会写诗的程序员的博客

从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKotlinor从 Java 开始进入 Kotlin的世界: From Java to Kotlin: JKo

在前面的内容里,我们已经看到了Java与Kotlin的互操作的基本方式。为了更好的认识Java与Kotlin这两门语言,我们在这里给出一些基本功能,同时使用Ja...

982
来自专栏Ryan Miao

jackson简单使用,对象转json,json转对象,json转list

添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/ja...

35511
来自专栏算法修养

HDU 1403 Eight&POJ 1077(康拖,A* ,BFS,双广)

Eight Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja...

2957
来自专栏陈树义

注解的那些事儿(三)| 注解的使用

在上面的 SweetDemo 中会发现我们在使用 @Sweet 注解的时候,手动给 sweetLevel 属性赋值。如果没有赋值,那么会报错。

1012
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第10章 Kotlin与Java互操作

在前面的章节中,我们已经学习了Kotlin的基础语法、类型系统、泛型与集合类、面向对象与函数式编程等主题,在上一章中我们还看到了Kotlin提供的轻量级并发编程...

1222
来自专栏小樱的经验随笔

HDU 1412 {A} + {B}

{A} + {B} Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K...

35315
来自专栏猿人谷

编程小技巧

1.判断一个自然数是否是某个数的平方?(其实就是判断这个数一定是奇数相加的) 由于 (n+1)^2 =n^2 + 2n + 1, = ... = 1 +...

21110

扫码关注云+社区