百度了一些博客,大同小异,在选取jar包工具的时候大概看了下,大抵是jdom原始,dom4j优秀。于是做了些练习。

参考:http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html

 package com.test.xml;

 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Random; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; /**
* @ClassName: TestDom4j
* @Description:dom4j练习xml的读写
* @author mrf
* @date 2015-11-11 下午02:25:20
*
*/
public class TestDom4j { /**
* @Title: read
* @Description:读取xml文件
* @param @param path 参数
* @return void 返回类型
* @throws DocumentException
*/
public static void read(String path) throws DocumentException{
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new File(path));
//获取根元素
Element root = doc.getRootElement();
System.out.println(root.getName()+root.attributeValue("name"));
//获取子元素
@SuppressWarnings("unchecked")
List<Element> grades = root.elements();
if(!grades.isEmpty()){
for (int i = 0; i < grades.size(); i++) {
Element element = grades.get(i);
System.out.println(element.getName()+element.attributeValue("name"));
@SuppressWarnings("unchecked")
List<Element> classes = element.elements();
if(classes.size()>0){
for (int j = 0; j < classes.size(); j++) {
Element cls = classes.get(j);
@SuppressWarnings("unchecked")
List<Element> stus = cls.elements();
if(!stus.isEmpty()){
for (int k = 0; k < stus.size(); k++) {
Element stu = stus.get(k);
System.out.println(stu.getName()+stu.attributeValue("name")); //以下证明elements方法返回值不会为null,另查看源码发现也是直接创建list
// List list = stu.elements();
// System.out.println(list==null);
// System.out.println(list.size());
// System.out.println(list);
}
} }
}
}
}
} /**
* @Title: getRandoStr
* @Description:获取一个随机字符串
* @param @param len
* @param @return 参数
* @return String 返回类型
*/
public static String getRandoStr(int len){
String base = "abcdefghijklmnopqrstuvwxyz1234567890";
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
sb.append(base.charAt(random.nextInt(base.length())));
} return sb.toString();
} /**
* @Title: write
* @Description: 测试写一个school文件
* @param @throws IOException 参数
* @return void 返回类型
*/
public static void write(String path) throws IOException{
//创建doc文档
Document doc = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement("school");
//设置根元素
doc.setRootElement(root);
//添加属性
root.addAttribute("name","实验中学");
root.addAttribute("position","河北石家庄"); Element grade = root.addElement("grade");
grade.addAttribute("name", "年级");
grade.addAttribute("size", "1");
Element cls = grade.addElement("class");
cls.addAttribute("name", "班级");
cls.addAttribute("size", "70");
Element stu = cls.addElement("student");
stu.addAttribute("name", getRandoStr(4));
stu.addAttribute("age", 13+"");
stu.addAttribute("sex", new Random().nextInt(2)+"");
stu.setText("学生"); // //添加三个子节点初一初二初三
// for (int i = 1; i < 4; i++) {
// Element grade = root.addElement("grade");
// grade.addAttribute("name", "grade_"+i);
// grade.addAttribute("size", "20");
// //添加20个班级
// for (int j = 1; j < 21; j++) {
// Element cls = grade.addElement("class");
// cls.addAttribute("name", "grade_"+i+"_class_"+j);
// cls.addAttribute("size", "70");
// //添加70个学生
// for (int k = 1; k < 71; k++) {
// Element stu = cls.addElement("student");
// stu.addAttribute("name", getRandoStr(4));
// stu.addAttribute("age", 12+i+"");
// stu.addAttribute("sex", new Random().nextInt(2)+"");
// stu.setText("学生");
// }
// }
// } //输出
//控制台
new XMLWriter().write(doc); //文件
//格式 -缩进\t true表示换行
OutputFormat format = new OutputFormat("\t",true);
XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);
writer.write(doc);
writer.flush();
writer.close(); } //解析xml字符串
public static Document parseStr(String xmlStr) throws DocumentException{
Document doc = DocumentHelper.parseText(xmlStr);
return doc;
} public static void main(String[] args) throws IOException, DocumentException {
// write("src/main/java/com/test/xml/school.xml"); read("src/main/java/com/test/xml/school.xml"); } }

dom4j的读写xml文件,读写xml字符串的更多相关文章

  1. 实现动态的XML文件读写操作

    实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...

  2. QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写   ...

  3. 实现动态的XML文件读写操作(依然带干货)

    前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实了,如何实现不管 ...

  4. xml文件读写

    创建xml文件,对xml文件进行添加新节点.删除节点.更新节点.创建的如下的xml文件. <?xml version="1.0" encoding="UTF-8&q ...

  5. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  6. 五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写

    调度器: 定时任务是通过调度器实现的.cocos2d-x推荐用调度器而不是其他方法实现定时任务.Node类都知道如何调度和取消调度事件. 有3种调度器: 默认调度器:schedulerUpdate() ...

  7. Android项目中的config.xml文件 “config.xml”

    Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encodin ...

  8. xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance

    http://blog.sina.com.cn/s/blog_4b6f8d150100nx3e.html http://blog.csdn.net/iaiti/article/details/4226 ...

  9. android-pull方式解析xml文件以及XML文件的序列化

    android解析XML ---------------------------基础要像磐石 在android平台上可以使用SAX.DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull ...

  10. 爪哇国新游记之十三----XML文件读写

    /** * XML读写示例 * @author hx * */ public class XmlReaderWriter{ /** * 读取一个XML文件,返回一个雇员链表 * @param file ...

随机推荐

  1. 添加Labels的两种方法

    private void AddLabel(IFeatureLayer pLayer,string fieldname,ITextSymbol Symbol) { container.DeleteAl ...

  2. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...

  3. Winform启动隐藏,WebBrowser交互JS

    一.启动隐藏 Winform比较奇怪,Load的时候设置Visiable=false,无效.webBrowser_DocumentCompleted之后调用hide隐藏了窗体,但是在notifyIco ...

  4. 在代码中设置IE9的默认文档模式

    要在旧系统中加一个jquery插件,本地demo测试没问题,部署到服务器后却报错.使用的是IE9浏览器,打开F12调试台,发现默认的文档模式是IE7,调成IE9后,报错消失.可以确认是该插件不兼容IE ...

  5. channel vs mutex

    记录许总演讲PPT指出的实践: channel– 本质上是一个 MessageQueue– 非常正统的执行体间通讯设施• sync.Mutex/RWMutex/Cond/etc– 不要把 channe ...

  6. (翻译)正确实施DevOps-The Lay of the Land

    原文地址:http://www.drdobbs.com/architecture-and-design/getting-devops-right-the-lay-of-the-land/2400626 ...

  7. iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  8. jquery 的队列queue

    使用示列代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  9. 神马是 NaN,它的类型是神马?怎么测试一个值是否等于 NaN?

    NaN 是 Not a Number 的缩写,JavaScript 的一种特殊数值,其类型是 Number,可以通过 isNaN(param) 来判断一个值是否是 NaN: console.log(i ...

  10. Python字符进度条

    Python字符进度条 看看这个神奇的module from tqdm import trange from time import sleep for r in trange(10, 1, -1): ...