• 其他依赖字段/方法
  1. private List<Book> bookList = new LinkedList<Book>();
  2. public List<Book> getBookList(String file) {
  3. parseXML(file);
  4. return this.bookList;
  5. }
  • 获取DocumentBuilder(文件解析器)
  1. /**
  2. * 解析XML文件
  3. * * @param file
  4. */
  5. private void parseXML(String file) {
  6. // 创建book临时变量
  7. Book book = null;
  8. // 1.创建SAXReader对象
  9. SAXReader reader = new SAXReader();
  10. // 2.1 创建输入流
  11. InputStreamReader input = null;
  12. try {
  13. // 2.2 实例化输入流,并指定编码
  14. input = new InputStreamReader(new FileInputStream(file), "utf-8");
  15. // 3.加载XML文件到 document
  16. Document document = reader.read(input);
  17. // 4.获取根节点
  18. Element rootElement = document.getRootElement();
  19. // 5.根据根节点获取子节点迭代器,并遍历
  20. Iterator bookIter = rootElement.elementIterator();
  21. while (bookIter.hasNext()) {
  22. // 初始化book对象
  23. book = new Book();
  24. // 声明子节点对象
  25. Element bookEle = (Element) bookIter.next();
  26. // 如果子节点为book
  27. if (bookEle.getName().equals("book")) {
  28. // 6.获取book节点的属性迭代器,并遍历
  29. Iterator eleIter = bookEle.attributeIterator();
  30. while (eleIter.hasNext()) {
  31. // 声明属性对象
  32. Attribute attr = (Attribute) eleIter.next();
  33. if (attr.getName().equals("id")) {
  34. book.setId(Integer.valueOf(attr.getValue()));
  35. }
  36. }
  37. // 7.获取book节点的子节点迭代器,并遍历
  38. Iterator childIter = bookEle.elementIterator();
  39. while (childIter.hasNext()) {
  40. // 声明book子节点对象
  41. Element child = (Element) childIter.next();
  42. // 判断并为book对象赋值
  43. switch (child.getName()) {
  44. case "title":
  45. book.setTitle(child.getText());
  46. break;
  47. case "author":
  48. book.setAuthor(child.getText());
  49. break;
  50. case "price":
  51. book.setPrice(Double.valueOf(child.getText()));
  52. break;
  53. case "year":
  54. book.setYear(child.getText());
  55. break;
  56. case "language":
  57. book.setLanguage(child.getText());
  58. break;
  59. default:
  60. System.out.println("未知属性!");
  61. }
  62. }
  63. // 向书籍列表添加书籍对象
  64. bookList.add(book);
  65. }
  66. }
  67. } catch (UnsupportedEncodingException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. } catch (FileNotFoundException e) {
  71. // TODO Auto-generated catch block
  72. e.printStackTrace();
  73. } catch (DocumentException e) {
  74. // TODO Auto-generated catch block
  75. e.printStackTrace();
  76. } finally {
  77. if (null != input) {
  78. try {
  79. input.close();
  80. } catch (IOException e) {
  81. // TODO Auto-generated catch block
  82. e.printStackTrace();
  83. }
  84. }
  85. }
  86. }
  • 生成XML文件
  1. /**
  2. * 创建XML文件,保存book列表
  3. * @param bookList
  4. * @param fileName
  5. * @param encoding
  6. */
  7. private void createXML1(List<Book> bookList, String fileName,
  8. String encoding) {
  9. // 1.创建Document文件
  10. Document document = DocumentHelper.createDocument();
  11. // 2.创建root节点
  12. Element root = document.addElement("bookstore");
  13. // 3.创建book节点
  14. for (Book book : bookList) {
  15. Element ebook = root.addElement("book");
  16. // 4.1为book节点添加属性
  17. ebook.addAttribute("id", String.valueOf(book.getId()));
  18. // 4.2为book增加子节点,并设置文本值
  19. Element eTitle = ebook.addElement("title");
  20. eTitle.addCDATA(book.getTitle());
  21. Element eAuthor = ebook.addElement("author");
  22. eAuthor.setText(book.getAuthor());
  23. Element eYear = ebook.addElement("year");
  24. eYear.setText(book.getYear());
  25. Element ePrice = ebook.addElement("ePrice");
  26. ePrice.setText(String.valueOf(book.getPrice()));
  27. Element eLanguage = ebook.addElement("language");
  28. eLanguage.setText(book.getLanguage());
  29. }
  30. // 5.声明输出流
  31. OutputStream output = null;
  32. XMLWriter writer = null;
  33. // 6.设置输出的XML格式
  34. OutputFormat format = OutputFormat.createPrettyPrint();
  35. // 7.设置XML文档编码
  36. format.setEncoding(encoding);
  37. try {
  38. // 8.实例化输出流
  39. output = new FileOutputStream(fileName);
  40. // 9.实例化XML输出流,加载XML格式及设置
  41. writer = new XMLWriter(output, format);
  42. // 10.向硬盘写入XML
  43. writer.write(document);
  44. } catch (FileNotFoundException e) {
  45. e.printStackTrace();
  46. } catch (UnsupportedEncodingException e) {
  47. e.printStackTrace();
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. } finally {
  51. if (null != output) {
  52. try {
  53. output.close();
  54. } catch (IOException e) {
  55. // TODO Auto-generated catch block
  56. e.printStackTrace();
  57. }
  58. }
  59. if (null != writer) {
  60. try {
  61. writer.close();
  62. } catch (IOException e) {
  63. // TODO Auto-generated catch block
  64. e.printStackTrace();
  65. }
  66. }
  67. }
  68. }
  • 创建RSS文件
  1. /**
  2. * 创建RSS文件
  3. *
  4. * @param fileName
  5. */
  6. private void createXML(String fileName) {
  7. // 1.创建document对象,代表XML文件
  8. Document document = DocumentHelper.createDocument();
  9. // 2.创建根节点
  10. Element rss = document.addElement("rss");
  11. // 3.为rss节点添加version属性(版本)
  12. rss.addAttribute("version", "2");
  13. // 3.1生成子节点及节点内容
  14. Element channel = rss.addElement("channel");
  15. // 3.2生成内容
  16. Element title = channel.addElement("title");
  17. title.setText("<![CDATA[国内最新新闻]]>");
  18. // 4.创建xml输出流
  19. File file = new File(fileName);
  20. XMLWriter writer = null;
  21. try {
  22. // 5.设置xml格式
  23. OutputFormat format = OutputFormat.createPrettyPrint();
  24. // 设置xml编码
  25. format.setEncoding("GBK");
  26. writer = new XMLWriter(new FileOutputStream(file), format);
  27. // 设置是否转义,默认为true(转义)
  28. writer.setEscapeText(false);
  29. // 6.将XML文件写到硬盘
  30. writer.write(document);
  31. } catch (UnsupportedEncodingException | FileNotFoundException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. } catch (IOException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. } finally {
  38. if (null != writer) {
  39. try {
  40. writer.close();
  41. } catch (IOException e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. }


XML文件(2)--使用DOM4J示例的更多相关文章

  1. XML文件操作之dom4j

    能够操作xml的api还是挺多的,DOM也是可以的,不过在此记录下dom4j的使用,感觉确实挺方便的 所需jar包官网地址:http://www.dom4j.org/dom4j-1.6.1/ dom4 ...

  2. XML文件解析之DOM4J解析

    1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...

  3. XML文件(1)--使用DOM示例

    其他依赖字段/方法 // 书籍列表 private List<Book> bookList = new LinkedList<Book>(); /** * 根据xml文件,得到 ...

  4. Java 读写XML文件 API--org.dom4j

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...

  5. 1.使用dom4j解析XML文件

    一.dom4j的简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...

  6. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  7. 菜鸟学Java(八)——dom4j详解之读取XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  8. 解析xml文件的几种技术与Dom4j与sax之间的对比

    一.解析xml文件的几种技术:dom4j.sax.jaxb.jdom.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的 ...

  9. xml文件的解析(用dom4j解析)

    有个第三方的包,用来解析.xml文件比较方便,它是DOM4J.由于是第三方的,所以要使用它就要先下载,并包含进来.步骤: 1.打开dom4j官网,这里下载最新版dom4j-2.1.1.jar. 2.新 ...

随机推荐

  1. 关于Oracle表连接

    表连接注意left join on与where的区别: select * from dept; select * from emp; select * from emp a right outer j ...

  2. 终于将rsync-3.1.2配置成功,之外还挖掘了一些新的用法

    1.为什么要用rsync: 有两台主机,开始准备做HA,考虑到工作量的问题,最终决定将重要文件进行同步即可. 找了一些同步的工具,rsync得到一致好评,速度快,消耗小等等. 2.接着找资料,最后选用 ...

  3. (八)数据呈现——一图胜千言<完结>

    数据分析师就像厨师一样.厨师的工作有5步:下单.备料.切配.烹饪.打荷.数据分析师的工作也有5步.呈现数据就好像打荷.厨师在把菜肴端给客人之前要做盘饰美化,让菜肴精致美观,这个工作就是打荷.同样,数据 ...

  4. {"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——记录一次微信错误处理

    错误情况概述: 启动应用之后,微信调用 相机拍照 等接口是可以正常使用的, 但是过了一段时间(2个小时左右--token/jsapi_ticket的过期时间),微信调用相机拍照的功能失效,启用debu ...

  5. iOS实现渐变色背景(两种方式实现)

    之前做过类似的功能,现在记录一下,来来来... 效果图: 说明=========================== 方法1: 说明:无返回值 用法:直接调用方法.原理是在view的layer层添加. ...

  6. mysql的缓冲查询和非缓冲查询

    最近在开发一个PHP程序时遇到了下面的错误: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的 ...

  7. SSH整合

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  8. asp.net缓存

    copy:http://www.cnblogs.com/knowledgesea/archive/2012/06/20/2536603.html 一.缓存概念,缓存的好处.类型.            ...

  9. HTML5使用jplayer播放音频、视频

    首先推上神器 jPlayer:基于HTML5/Flash的音频.视频播放器 jPlayer是一个JavaScript写的完全免费和开源 (MIT) 的jQuery多媒体库插件 (现在也是一个Zepto ...

  10. GO语言总结(4)——映射(Map)

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map) 映射是一种内置的数据结构,用来保存键值对的无序集合. (1)映射的创建 make ( m ...