XML文件(2)--使用DOM4J示例
- 其他依赖字段/方法
private List<Book> bookList = new LinkedList<Book>();
public List<Book> getBookList(String file) {
parseXML(file);
return this.bookList;
}
- 获取DocumentBuilder(文件解析器)
/**
* 解析XML文件
* * @param file
*/
private void parseXML(String file) {
// 创建book临时变量
Book book = null;
// 1.创建SAXReader对象
SAXReader reader = new SAXReader();
// 2.1 创建输入流
InputStreamReader input = null;
try {
// 2.2 实例化输入流,并指定编码
input = new InputStreamReader(new FileInputStream(file), "utf-8");
// 3.加载XML文件到 document
Document document = reader.read(input);
// 4.获取根节点
Element rootElement = document.getRootElement();
// 5.根据根节点获取子节点迭代器,并遍历
Iterator bookIter = rootElement.elementIterator();
while (bookIter.hasNext()) {
// 初始化book对象
book = new Book();
// 声明子节点对象
Element bookEle = (Element) bookIter.next();
// 如果子节点为book
if (bookEle.getName().equals("book")) {
// 6.获取book节点的属性迭代器,并遍历
Iterator eleIter = bookEle.attributeIterator();
while (eleIter.hasNext()) {
// 声明属性对象
Attribute attr = (Attribute) eleIter.next();
if (attr.getName().equals("id")) {
book.setId(Integer.valueOf(attr.getValue()));
}
}
// 7.获取book节点的子节点迭代器,并遍历
Iterator childIter = bookEle.elementIterator();
while (childIter.hasNext()) {
// 声明book子节点对象
Element child = (Element) childIter.next();
// 判断并为book对象赋值
switch (child.getName()) {
case "title":
book.setTitle(child.getText());
break;
case "author":
book.setAuthor(child.getText());
break;
case "price":
book.setPrice(Double.valueOf(child.getText()));
break;
case "year":
book.setYear(child.getText());
break;
case "language":
book.setLanguage(child.getText());
break;
default:
System.out.println("未知属性!");
}
}
// 向书籍列表添加书籍对象
bookList.add(book);
}
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != input) {
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- 生成XML文件
/**
* 创建XML文件,保存book列表
* @param bookList
* @param fileName
* @param encoding
*/
private void createXML1(List<Book> bookList, String fileName,
String encoding) {
// 1.创建Document文件
Document document = DocumentHelper.createDocument();
// 2.创建root节点
Element root = document.addElement("bookstore");
// 3.创建book节点
for (Book book : bookList) {
Element ebook = root.addElement("book");
// 4.1为book节点添加属性
ebook.addAttribute("id", String.valueOf(book.getId()));
// 4.2为book增加子节点,并设置文本值
Element eTitle = ebook.addElement("title");
eTitle.addCDATA(book.getTitle());
Element eAuthor = ebook.addElement("author");
eAuthor.setText(book.getAuthor());
Element eYear = ebook.addElement("year");
eYear.setText(book.getYear());
Element ePrice = ebook.addElement("ePrice");
ePrice.setText(String.valueOf(book.getPrice()));
Element eLanguage = ebook.addElement("language");
eLanguage.setText(book.getLanguage());
}
// 5.声明输出流
OutputStream output = null;
XMLWriter writer = null;
// 6.设置输出的XML格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 7.设置XML文档编码
format.setEncoding(encoding);
try {
// 8.实例化输出流
output = new FileOutputStream(fileName);
// 9.实例化XML输出流,加载XML格式及设置
writer = new XMLWriter(output, format);
// 10.向硬盘写入XML
writer.write(document);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != output) {
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (null != writer) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- 创建RSS文件
/**
* 创建RSS文件
*
* @param fileName
*/
private void createXML(String fileName) {
// 1.创建document对象,代表XML文件
Document document = DocumentHelper.createDocument();
// 2.创建根节点
Element rss = document.addElement("rss");
// 3.为rss节点添加version属性(版本)
rss.addAttribute("version", "2");
// 3.1生成子节点及节点内容
Element channel = rss.addElement("channel");
// 3.2生成内容
Element title = channel.addElement("title");
title.setText("<![CDATA[国内最新新闻]]>");
// 4.创建xml输出流
File file = new File(fileName);
XMLWriter writer = null;
try {
// 5.设置xml格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置xml编码
format.setEncoding("GBK");
writer = new XMLWriter(new FileOutputStream(file), format);
// 设置是否转义,默认为true(转义)
writer.setEscapeText(false);
// 6.将XML文件写到硬盘
writer.write(document);
} catch (UnsupportedEncodingException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != writer) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
XML文件(2)--使用DOM4J示例的更多相关文章
- XML文件操作之dom4j
能够操作xml的api还是挺多的,DOM也是可以的,不过在此记录下dom4j的使用,感觉确实挺方便的 所需jar包官网地址:http://www.dom4j.org/dom4j-1.6.1/ dom4 ...
- XML文件解析之DOM4J解析
1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...
- XML文件(1)--使用DOM示例
其他依赖字段/方法 // 书籍列表 private List<Book> bookList = new LinkedList<Book>(); /** * 根据xml文件,得到 ...
- Java 读写XML文件 API--org.dom4j
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...
- 1.使用dom4j解析XML文件
一.dom4j的简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
- 菜鸟学Java(八)——dom4j详解之读取XML文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- 解析xml文件的几种技术与Dom4j与sax之间的对比
一.解析xml文件的几种技术:dom4j.sax.jaxb.jdom.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的 ...
- xml文件的解析(用dom4j解析)
有个第三方的包,用来解析.xml文件比较方便,它是DOM4J.由于是第三方的,所以要使用它就要先下载,并包含进来.步骤: 1.打开dom4j官网,这里下载最新版dom4j-2.1.1.jar. 2.新 ...
随机推荐
- 萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)
萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配 ...
- SQL 中的 AND OR
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤. AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 如果第一个条件和第二个条件都成立,则 ...
- AC日记——地鼠游戏 codevs 1052
1052 地鼠游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...
- [No0000A8]Word中设置图片下的题注及插入多级列表编号
1.什么是题注? 2.怎么实现一个可以自动更新的题注? 只有先定义好文档编号后,才可以设置出正确的图片下标题注. 文章的结构可以通过导航窗口导航. 导航窗口打开方式. 3.设置好文档编号后,怎样插入 ...
- [LeetCode] Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串
Given a string, find the length of the longest substring T that contains at most k distinct characte ...
- [LeetCode] Additive Number 加法数
Additive number is a positive integer whose digits can form additive sequence. A valid additive sequ ...
- [LeetCode] Product of Array Except Self 除本身之外的数组之积
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...
- 如何使用DotfuscatorPro_4.9对软件进行加密
DotfuscatorPro_4.9可以防止你的.NET软件被反编译,可以在一定程度上防止你的软件被反编译.现在很多软件都有被反编译的现象,虽然不能做到百分百的防范,但是你至少可以先做些技术上的处理, ...
- HTTPf服务器(3)
功能完整的HTTP服务器 导语 这个一个功能完备的HTTP服务器.它可以提供一个完整的文档输,包括图像,applet,HTML文件,文本文件.它与SingleFileHttpServer非常相似,只不 ...
- 学习ASP.NET 5和MVC6
今天很荣幸的参加了微软开源跨平台讲座,充分认识了下一个版本的ASP.NET所带来的激动人心的特性.虽然过去已经断断续续的了解了一些ASP.NET5和MVC6与EF7的动态,但是都没有这一次来的系统化( ...