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.新 ...
随机推荐
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- freeradius整合AD域作anyconncet认证服务器
一.服务器要求 Radius服务器:centos6.6.hostname.selinux disabled.stop iptables AD域服务器:Windows Server 2008 R2 E ...
- 如何在github上下载单个文件夹?
作者:ce ge链接:https://www.zhihu.com/question/25369412/answer/96174755来源:知乎著作权归作者所有,转载请联系作者获得授权. Git1.7. ...
- Django 前后台的数据传递
Django 从后台往前台传递数据时有多种方法可以实现. 最简单的后台是这样的: from django.shortcuts import render def main_page(request): ...
- python爬虫学习(9) —— 一些工具和语法
1. Beautiful Soup 在它的官网有这样一段话: You didn't write that awful page. You're just trying to get some data ...
- 使用SQLiteOpenHelper的onUpgrade实现数据库版本升级
Andoird的SQLiteOpenHelper类中有一个onUpgrade方法.帮助文档中只是说当数据库升级时该方法被触发.经过实践,解决了我一连串的疑问: 1. 帮助文档里说的"数据库升 ...
- Laravel中的ajax跨域请求
最近接触Laravel框架ajax跨域请求的过程中遇到一些问题,在这里做下总结. 一开始发起ajax请求一直报500错误,搜索相关资料后发现Laravel要允许跨域请求可以加入Cors中间件,代码如下 ...
- [LeetCode] Single Number III 单独的数字之三
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- [LeetCode] Shortest Word Distance III 最短单词距离之三
This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...
- Ajax入门(二)
接收服务器返回的消息 1,定义触发Ajax的js效果 2,创建Ajax方法 如果返回的数据是XML,则需使用aj.responseXML 3,接收服务器返回的消息,并显示在网页上 错误案例:直接接收服 ...