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文件到 documentDocument 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();// 如果子节点为bookif (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 blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (null != input) {try {input.close();} catch (IOException e) {// TODO Auto-generated catch blocke.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.向硬盘写入XMLwriter.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 blocke.printStackTrace();}}if (null != writer) {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (null != writer) {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.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.新 ...
随机推荐
- SQL中Round(),Floor(),Ceiling()函数的浅析
项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...
- jni操作jobject
一. 注册JNI函数 1. 静态方法 一般使用javah进行编译,生成很长的文件名和函数名字,这个书写不方便,影响运行效率. 2. 动态注册 使用JNINativeMe ...
- [转]An introduction to OAuth 2.0 using Facebook in ASP.NET Core
本文转自:http://andrewlock.net/an-introduction-to-oauth-2-using-facebook-in-asp-net-core/ This is the ne ...
- github page+jekyll搭博客初体验
div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 0 10px; padding ...
- [bzoj1007][HNOI2008][水平可见直线] (斜率不等式)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y ...
- ConcurrentHashMap
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable.对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多 ...
- [LeetCode] Path Sum 二叉树的路径和
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- Hibernate 查询方式(HQL/QBC/QBE)汇总
作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...
- Snowflake 全局唯一Id 生成
/// <summary> /// From: https://github.com/twitter/snowflake /// An object that generates IDs. ...
- .NET跨平台之旅:成功将示例站点升级至ASP.NET Core RC2
ASP.NET Core RC2 终于发布了( Announcing ASP.NET Core RC2 ).为了庆祝这次发布,我们将运行在 Ubuntu 服务器上的示例站点 about.cnblogs ...