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

  • 其他依赖字段/方法
  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. }
时间: 2024-08-01 23:17:27

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

【Android进阶】解析XML文件之使用DOM解析器

在前面的文章中,介绍了使用SAX解析器对XML文件进行解析,SAX解析器的优点就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析.DOM解析器的优点可能是理解起来比较的直观,当然,每个人对不同的解析方法可能有不同的喜好.但是DOM解析器有个比较大的缺点,就是占用内存比较多,在Android中的XML解析中,还是更推荐其他的解析方式. 下面介绍使用DOM解析器对XML进行解析. 下面是我们需要解析的xml文件 <?xml version="1.0" encodin

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

Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX DOM4J JDOM (其中DOM.SAX是官方提供的解析方式,不需要额外的jar包,后两种则需要) 例:DOM方式解析books.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <bookstore>

XML文件解析之--DOM与SAX

xml文件又称‘可扩展性标记语言’,可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml文件无处不在,这次就烂讨论一下xml常用的解析方法及其CRUD操作,欢迎大家交流指正. 我们先来看看两种解析方式的过程,比较一下他们的优劣之处. SAX解析方式:它对xml文档进行逐行扫描,一边扫描一边解析.当扫描到文档(document)开始与结束.元素(element)开始与结束.文档(docu

XML文件解析之DOM解析

XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解析以及JDOM解析,首先来讲下DOM解析的具体实现方式: 1.重要的对象 DocumentBuilderFactory: 创建文档解析器的工厂对象 DocumentBuilder :得到文档解析器对象,由工长对象获取 Document :文档对象 2.解析XML实现方式 XML文件: <?xml v

02-Java是如何解析xml文件的(DOM)

Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX DOM4J JDOM (其中DOM.SAX是官方提供的解析方式,不需要额外的jar包,后两种则需要) 例:DOM方式解析books.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <bookstore>

Java:简单的解析XML文件之使用DOM解析

XML简介 要理解XML,HTML等格式,先来理解文档对象模型DOM 根据 DOM,HTML 文档中的每个成分都是一个节点,这些节点组成了一棵树.DOM 是这样规定的:整个文档是一个文档节点每个 HTML 标签是一个元素节点包含在 HTML 元素中的文本是文本节点每一个 HTML 属性是一个属性节点注释属于注释节点 节点彼此都有等级关系.HTML 文档中的所有节点组成了一个文档树(或节点树).HTML 文档中的每个元素.属性.文本等都代表着树中的一个节点.树起始于文档节点,并由此继续伸出枝条,直

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 f

Python解析XML文件

python对XML的解析 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同. python有三种方法解析XML,SAX,DOM,以及ElementTree: 1.SAX (simple API for XML ) pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件. 2.DOM(Document Object Model) 将XML数据在内存中解析成一个树,通过

9.XML文件解析

一.xml文件的引入 1.1 创建Student.java类 1 package com.entity; 2 /** 3 * 1.创建学生类 4 * @author pc 5 * 6 */ 7 public class Student { 8 private int id; 9 private String name; 10 private String course; 11 private int score; 12 13 public Student() { 14 } 15 public S