dom4j的读写xml文件,读写xml字符串
百度了一些博客,大同小异,在选取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字符串的更多相关文章
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
- QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写 ...
- 实现动态的XML文件读写操作(依然带干货)
前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实了,如何实现不管 ...
- xml文件读写
创建xml文件,对xml文件进行添加新节点.删除节点.更新节点.创建的如下的xml文件. <?xml version="1.0" encoding="UTF-8&q ...
- 使用Java解析XML文件或XML字符串的例子
转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...
- 五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写
调度器: 定时任务是通过调度器实现的.cocos2d-x推荐用调度器而不是其他方法实现定时任务.Node类都知道如何调度和取消调度事件. 有3种调度器: 默认调度器:schedulerUpdate() ...
- Android项目中的config.xml文件 “config.xml”
Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encodin ...
- 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 ...
- android-pull方式解析xml文件以及XML文件的序列化
android解析XML ---------------------------基础要像磐石 在android平台上可以使用SAX.DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull ...
- 爪哇国新游记之十三----XML文件读写
/** * XML读写示例 * @author hx * */ public class XmlReaderWriter{ /** * 读取一个XML文件,返回一个雇员链表 * @param file ...
随机推荐
- nginx.conf各参数的意义
搬运+翻译至 http://qiita.com/syou007/items/3e2d410bbe65a364b603 /etc/nginx/nginx.conf 记录各个参数的意义 user user ...
- C++ REST SDK in Visual Studio 2013
The C++ REST project provides a modern asynchronous C++ API for cloud-based client-server communicat ...
- Linux下PHP安装oci8扩展
PHP通常搭配Mysql使用,但有时候也会连接到Oracle数据库.安装PHP的oci8扩张之前,需要先安装Oracle Instant Client( basic 或 basic lite 版就行了 ...
- Async Console Programs 异步控制台程序
如果你正在写一个控制台程序,你可能最终想要一个异步的main方法,像这样: class Program { static async void Main(string[] args) { ... } ...
- Javascript原型模式总结梳理
在大多数面向对象语言中,对象总是由类中实例化而来,类和对象的关系就像模具跟模件一样.Javascript中没有类的概念,就算ES6中引入的class也不过是一种语法糖,本质上还是利用原型实现.在原型编 ...
- git/ssh捋不清的几个问题
主要是 windows 用户会遇到很多纠结的问题,linux/unix 用户属于这方面的高端用户,应该有能力处理此类问题,而且网络上也有很多解决方案,本文的授众是 windows 用户.由于今天配置了 ...
- 掌握js模板引擎
最近要做一个小项目,不管是使用angularjs还是reactjs,都觉得大材小用了.其实我可能只需要引入一个jquery,但想到jquery对dom的操作,对于早已习惯了双向绑定模式的我,何尝不是一 ...
- 我心中的核心组件(可插拔的AOP)~调度组件quartz.net
回到目录 quartz.net是一个任务调度组件,它可以灵活的设置你的调试方式,按时间,按日期,按周期都可以很容易的实现,quartz不仅可以用在web中,而且还可以部署在winform,winser ...
- 说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现
返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以 ...
- 移动h5开发资源整理
这2年来,移动h5开发逐渐成为一种主流,也不断趋向于成熟.硬件和浏览器的不断更新,曾经的浏览器兼容也不再是开发者的噩梦. 接触h5开发一年多,从最初的新手到现在,陆陆续续遇到过很多坑.这里把想到的一些 ...