• 其他依赖字段/方法
  1. // 书籍列表
  2. private List<Book> bookList = new LinkedList<Book>();
  3. /**
  4. * 根据xml文件,得到书籍列表
  5. *
  6. * @param file
  7. * @return
  8. */
  9. public List<Book> getBookList(String file) {
  10. parseXML(file);
  11. return bookList;
  12. }
  • 获取DocumentBuilder(文件解析器)
  1. /**
  2. * 获取DocumentBuilder对象
  3. *@return
  4. */
  5. private DocumentBuilder getDocumentBuilder() {
  6. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  7. DocumentBuilder builder = null;
  8. try {
  9. builder = factory.newDocumentBuilder();
  10. } catch (ParserConfigurationException e) {
  11. // TODO Auto-generated catch block
  12. e.printStackTrace();
  13. }
  14. return builder;
  15. }

  • 解析XML文件
  1. /**
  2. * 读取XML,并将book对象存入书籍列表
  3. *
  4. * @param file
  5. */
  6. private void parseXML(String file) {
  7. // 1.临时书籍变量
  8. Book book;
  9. try {
  10. // 2.获取DocumentBuilder对象
  11. DocumentBuilder documentBuilder = getDocumentBuilder();
  12. // 3.加载XML文件到当前项目下,获取Document‘文档’对象
  13. Document document = documentBuilder.parse(file);
  14. // 4.获取节点名称是book的集合
  15. NodeList books = document.getElementsByTagName("book");
  16. // 5.遍历book节点集合
  17. for (int i = 0; i < books.getLength(); i++) {
  18. // 重置book变量
  19. book = new Book();
  20. // 5.1声明book节点变量
  21. Node bookNode = books.item(i);
  22. // 5.2获取book节点的属性集合
  23. NamedNodeMap nodeMap = bookNode.getAttributes();
  24. // 5.3遍历属性集合,判断并为book对象的属性赋值
  25. for (int j = 0; j < nodeMap.getLength(); j++) {
  26. // 5.4声明book的属性
  27. Node attrNode = nodeMap.item(j);
  28. // 5.5如果属性Name为id
  29. if (attrNode.getNodeName().equals("id")) {
  30. book.setId(Integer.valueOf(attrNode.getNodeValue()));
  31. }
  32. }
  33. // 5.6获取book节点的子节点
  34. NodeList childList = bookNode.getChildNodes();
  35. // 5.7遍历子节点
  36. for (int j = 0; j < childList.getLength(); j++) {
  37. // 5.8 声明book子节点
  38. Node child = childList.item(j);
  39. // 判断是否是节点。NodeType有三种:
  40. // Element(节点):1,Attribute(属性):2,#Text(文本):3。
  41. if (Node.ELEMENT_NODE == child.getNodeType()) {
  42. // 5.9使用switch case判断,并为book对象属性赋值
  43. switch (child.getNodeName()) {
  44. case "title":
  45. book.setTitle(child.getTextContent());
  46. break;
  47. case "author":
  48. book.setAuthor(child.getTextContent());
  49. break;
  50. case "price":
  51. book.setPrice(Double.valueOf(child.getTextContent()));
  52. break;
  53. case "year":
  54. book.setYear(child.getTextContent());
  55. break;
  56. case "language":
  57. book.setLanguage(child.getTextContent());
  58. break;
  59. default:
  60. System.out.println("未知属性!");
  61. }
  62. }
  63. }
  64. // 6 将book对象放入集合
  65. bookList.add(book);
  66. }
  67. } catch (SAXException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. } catch (IOException e) {
  71. // TODO Auto-generated catch block
  72. e.printStackTrace();
  73. }
  74. }

  • 生成XML文件
  1. /**
  2. * 生成XML文件,写入book列表
  3. *
  4. * @param file
  5. */
  6. private void createXML(List<Book> bookList, String file, String encoding) {
  7. DocumentBuilder builder = getDocumentBuilder();
  8. //创建document文件
  9. Document document = builder.newDocument();
  10. // 在document中,创建根节点
  11. Element eBookstore = document.createElement("bookstore");
  12. for (Book book : bookList) {
  13. // 创建book节点
  14. Element eBook = document.createElement("book");
  15. // 为book节点添加id属性
  16. eBook.setAttribute("id", String.valueOf(book.getId()));
  17. // 创建book的子节点
  18. Element eTitle = document.createElement("title");
  19. // 创建CDATA元素
  20. CDATASection titleByCDATA = document.createCDATASection(book.getTitle());
  21. // 将CDATA元素加入title
  22. eTitle.appendChild(titleByCDATA);
  23. eTitle.setTextContent(book.getTitle());
  24. Element eAuthor = document.createElement("author");
  25. eAuthor.setTextContent(book.getAuthor());
  26. Element eYear = document.createElement("year");
  27. eYear.setTextContent(book.getYear());
  28. Element ePrice = document.createElement("price");
  29. ePrice.setTextContent(String.valueOf(book.getPrice()));
  30. Element eLanguage = document.createElement("language");
  31. eLanguage.setTextContent(book.getLanguage());
  32. // 将子节点添加到book中
  33. eBook.appendChild(eTitle);
  34. eBook.appendChild(eAuthor);
  35. eBook.appendChild(eYear);
  36. eBook.appendChild(ePrice);
  37. eBook.appendChild(eLanguage);
  38. // 将book节点添加到bookstore根节点中
  39. eBookstore.appendChild(eBook);
  40. }
  41. // 将bookstore节点添加到document中,目前文件只存在与内存中
  42. document.appendChild(eBookstore);
  43. // 创建TransformerFactory 对象
  44. Transformer former = getTransformer(encoding);
  45. try {
  46. // 创建输出流
  47. OutputStream output = new FileOutputStream(file);
  48. // 输出XML文件到硬盘
  49. former.transform(new DOMSource(document), new StreamResult(output));
  50. } catch (TransformerConfigurationException e) {
  51. // TODO Auto-generated catch block
  52. e.printStackTrace();
  53. } catch (FileNotFoundException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. } catch (TransformerException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. }
  60. }

  • 保存Tranformer对象,用于保存XML文件,设置自动换行和编码
  1. /**
  2. * 获取Tranformer对象
  3. *
  4. * @param encoding
  5. * 指定编码
  6. * @return Tranformer
  7. */
  8. private Transformer getTransformer(String encoding) {
  9. // 创建TransformerFactory 对象
  10. TransformerFactory factory = TransformerFactory.newInstance();
  11. Transformer former = null;
  12. try {
  13. former = factory.newTransformer();
  14. // 换行
  15. former.setOutputProperty(OutputKeys.INDENT, "yes");
  16. // 指定编码
  17. former.setOutputProperty(OutputKeys.ENCODING, encoding);
  18. } catch (TransformerConfigurationException e) {
  19. // TODO Auto-generated catch block
  20. e.printStackTrace();
  21. }
  22. return former;
  23. }

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

  1. Java中的的XML文件读写与DOM

    XML简介 要理解XML,HTML等格式,先来理解文档对象模型DOM 根据 DOM,HTML 文档中的每个成分都是一个节点,这些节点组成了一棵树.DOM 是这样规定的:整个文档是一个文档节点每个 HT ...

  2. XML文件解析之--DOM与SAX

    xml文件又称‘可扩展性标记语言’,可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml ...

  3. Java是如何解析xml文件的(DOM)

    Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...

  4. android解析xml文件方法之一-----DOM

    Hello.xml文件 <dict num="219" id="219" name="219"> <key>hell ...

  5. XML文件的解析—DOM、SAX

    一.DOM 解析 思路:获得Document对象,遍历其中节点获得需要的内容 要点: Document :  DocuemntBuilderFactory --newDocumentBuilder - ...

  6. 解析XML文件之使用DOM解析器

    在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...

  7. XML文件解析之DOM解析

    XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解 ...

  8. XML文件(2)--使用DOM4J示例

    其他依赖字段/方法 private List<Book> bookList = new LinkedList<Book>(); public List<Book> ...

  9. Python中使用dom模块生成XML文件示例

    在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...

随机推荐

  1. 关于Spring的构造函数,init-method,和依赖注入的先后顺序

    接触学习Spring一段时间了,今天突然脑子短路,竟然一时间忘记了构造函数,init-method,和依赖注入的先后顺序,然后打开IDE去验证后.构造函数-->依赖注入-->init-me ...

  2. [MySQL性能优化系列]巧用索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

  3. kvm/qemu/libvirt学习笔记 (1) qemu/kvm/libvirt介绍及虚拟化环境的安装

    kvm简介 kvm最初由Quramnet公司开发,2008年被RedHat公司收购.kvm全称基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux的一个内核模块 ...

  4. 【转】XenServer的架构之Xenopsd组件架构与运行机制

    一.Xenopsd概述 Xenopsd是XenServer的虚拟机管理器. Xenopsd负责:启动,停止,暂停,恢复,迁移虚拟机:热插拔虚拟磁盘(VBD):热插拔虚拟网卡(VIF):热插拔虚拟PCI ...

  5. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  6. 深入SpringMVC

    一.如何让一个普通类成为Controller? 方案一:实现接口Controller 解析:handleRequest(request,response) 方案二:继承AbstractControll ...

  7. [LeetCode] Ternary Expression Parser 三元表达式解析器

    Given a string representing arbitrarily nested ternary expressions, calculate the result of the expr ...

  8. [LeetCode] Spiral Matrix II 螺旋矩阵之二

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  9. 讲座:Influence maximization on big social graph

    Influence maximization on big social graph Fanju PPT链接: social influence booming of online social ne ...

  10. 输入流和字符串互转,InputStream2String,String2InputStream

    输入流转字符串 public static String InputStream2String(InputStream in) { InputStreamReader reader = null; t ...