• 其他依赖字段/方法
  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. SQL中EXISTS的使用

    1.简介 不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询. 相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS 的子查询就是相关子查询 EXIST ...

  2. 5-3 bash脚本编程之二 条件判断

    1. 条件测试的表达式 1. [ expression ]  :注意这个中括号的前后都有一个空格 2. [[ expression ]] 3. test expression 2.条件判断的类型 1. ...

  3. [原创]最近使用React-Native的适配问题和警告搜集

    主要记录一下最近使用RN 0.29.2版本遇到的适配的坑以及部分警告的解法. 适配类: 安卓输入框圆角.边框颜色.粗细等无法设置成功,需要在TextInput外面新增一个View设置圆角,TextIn ...

  4. Double Dispatch讲解与实例-面试题

    引言 说实话,我看过GoF<Design Patterns>,也曾深深的被李建忠<设计模式>系列Webcast吸引.但是还没有见过“Double Dispatch模式”.的确G ...

  5. ubuntu 14.04 desktop装vnc4server

    ubuntu 14.04 desktop上安装vnc4server要装上gnome的一些软件包并修改启动文件~/.vnc/xstartup 问题来源How to make VNC Server wor ...

  6. 大三那年在某宝8块钱买的.NET视频决定了我的职业生涯

    前言 谨以此文献给那些还在大学中迷茫的莘莘学子们! 韩愈在<师说>中提出了作为师者应该做的三件事:传道.授业.解惑. 1.传道:培养学生的道德观 2.授业:传授学生专业技能 3.解惑:解答 ...

  7. 分分钟搞定IOS远程消息推送

    一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...

  8. SD卡的监听

    摘要:在一般应用中,如果需要对占用空间比较大的文件操作,需要监听SD卡的状态,Android中对SD卡的监听状态操作步骤如下: 一.创建一个类继承于BroadcastReceiver public c ...

  9. listbox 多选删除(找了好多都不行,终于让我写出来了)

    方法一:两个for循环 aspx.cs private string id=""; protected void btn_del_Click(object sender, Even ...

  10. document.domain

    HTML DOM DOCUMENT 对象 定义和用法 domain 属性可返回下载当前文档的服务器域名. 语法 document.domain 说明 该属性是一个只读的字符串,包含了载入当前文档的 w ...