在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式。
下面将介绍如何通过jdom来读取xml配置文件信息。

配置文件信息


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <config>
  3. <base-config>
  4. <stringValue>Hello world</stringValue>
  5. <integerValue>8</integerValue>
  6. <longValue>32768</longValue>
  7. </base-config>
  8. <books>
  9. <book id="111">
  10. <name>Java 编程</name>
  11. <price>33</price>
  12. </book>
  13. <book id="222">
  14. <name>Spring学习指南</name>
  15. <price>55</price>
  16. </book>
  17. </books>
  18. <computers>
  19. <computer type="dell" size="14寸" />
  20. <computer type="thinkpad" size="16寸" />
  21. <computer type="apple" size="22寸" />
  22. </computers>
  23. </config>


需要的Jar包(MAVEN给出)



完整的POM文件


  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.ll</groupId>
  5. <artifactId>myThreadStudy</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>myThreadStudy</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <junitVersion>3.8.1</junitVersion>
  13. <commons-io-Version>2.4</commons-io-Version>
  14. <jaxenVersion>1.1.1</jaxenVersion>
  15. <jdomVersion>1.1</jdomVersion>
  16. <log4jVersion>1.2.17</log4jVersion>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>junit</groupId>
  21. <artifactId>junit</artifactId>
  22. <version>${junitVersion}</version>
  23. <scope>test</scope>
  24. </dependency>
  25. <dependency>
  26. <groupId>commons-io</groupId>
  27. <artifactId>commons-io</artifactId>
  28. <version>${commons-io-Version}</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.jdom</groupId>
  32. <artifactId>jdom</artifactId>
  33. <version>${jdomVersion}</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>log4j</groupId>
  37. <artifactId>log4j</artifactId>
  38. <version>${log4jVersion}</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>jaxen</groupId>
  42. <artifactId>jaxen</artifactId>
  43. <version>${jaxenVersion}</version>
  44. </dependency>
  45. </dependencies>
  46. <build>
  47. <defaultGoal>install</defaultGoal>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-compiler-plugin</artifactId>
  52. <version>2.5.1</version>
  53. <configuration>
  54. <source>1.7</source>
  55. <target>1.7</target>
  56. <encoding>UTF-8</encoding> <!-- “编码 GBK 的不可映射字符”问题的解决 -->
  57. </configuration>
  58. </plugin>
  59. </plugins>
  60. </build>
  61. </project>



通用的XML操作类(XMLOperatorUtils.java)


  1. package com.ll.myThreadStudy.MyThread;
  2. import java.util.List;
  3. import org.jdom.Element;
  4. import org.jdom.JDOMException;
  5. import org.jdom.xpath.XPath;
  6. public class XMLOperatorUtils {
  7. public static String getElementAttributeStringValue(Element element,
  8. String AttributeName) {
  9. try {
  10. return element.getAttributeValue(AttributeName);
  11. } catch (Exception e) {
  12. return null;
  13. }
  14. }
  15. public static Integer getElementAttributeIntegerValue(Element element,
  16. String AttributeName) {
  17. try {
  18. return Integer.parseInt(getElementAttributeStringValue(element,
  19. AttributeName));
  20. } catch (Exception e) {
  21. return -1;
  22. }
  23. }
  24. public static Long getElementAttributeLongValue(Element element,
  25. String AttributeName) {
  26. try {
  27. return Long.parseLong(getElementAttributeStringValue(element,
  28. AttributeName));
  29. } catch (Exception e) {
  30. return -1l;
  31. }
  32. }
  33. public static Boolean getElementAttributeBooleanValue(Element element,
  34. String AttributeName) {
  35. try {
  36. return Boolean.parseBoolean(getElementAttributeStringValue(element,
  37. AttributeName));
  38. } catch (Exception e) {
  39. return false;
  40. }
  41. }
  42. public static String getElementTextStringValueFromRoot(Element rootEle,
  43. String path) {
  44. try {
  45. return ((Element) getSingleNode(rootEle, path)).getTextTrim();
  46. } catch (Exception e) {
  47. return null;
  48. }
  49. }
  50. public static Integer getElementTextIntegerValueFromRoot(Element rootEle,
  51. String path) {
  52. try {
  53. return Integer.parseInt(getElementTextStringValueFromRoot(rootEle,
  54. path));
  55. } catch (Exception e) {
  56. return -1;
  57. }
  58. }
  59. public static Long getElementTextLongValueFromRoot(Element rootEle,
  60. String path) {
  61. try {
  62. return Long.parseLong(getElementTextStringValueFromRoot(rootEle,
  63. path));
  64. } catch (Exception e) {
  65. return -1l;
  66. }
  67. }
  68. public static Boolean getElementTextBooleanValueFromRoot(Element rootEle,
  69. String path) {
  70. try {
  71. return Boolean.parseBoolean(getElementTextStringValueFromRoot(
  72. rootEle, path));
  73. } catch (Exception e) {
  74. return false;
  75. }
  76. }
  77. public static String getElementTextStringValueByElement(Element element,
  78. String childName) {
  79. try {
  80. return element.getChildText(childName);
  81. } catch (Exception e) {
  82. return null;
  83. }
  84. }
  85. protected static Integer getElementTextIntegerValueByElement(
  86. Element element, String childName) {
  87. try {
  88. return Integer.parseInt(getElementTextStringValueByElement(element,
  89. childName));
  90. } catch (Exception e) {
  91. return -1;
  92. }
  93. }
  94. protected static Long getElementTextLongValueByElement(Element element,
  95. String childName) {
  96. try {
  97. return Long.parseLong(getElementTextStringValueByElement(element,
  98. childName));
  99. } catch (Exception e) {
  100. return -1l;
  101. }
  102. }
  103. protected static Boolean getElementTextBooleanValueByElement(
  104. Element element, String childName) {
  105. try {
  106. return Boolean.parseBoolean(getElementTextStringValueByElement(
  107. element, childName));
  108. } catch (Exception e) {
  109. return false;
  110. }
  111. }
  112. protected static Object getSingleNode(Element rootEle, String path)
  113. throws JDOMException {
  114. return XPath.selectSingleNode(rootEle, path);
  115. }
  116. @SuppressWarnings("rawtypes")
  117. protected static List getNodes(Element rootEle, String path)
  118. throws JDOMException {
  119. return XPath.selectNodes(rootEle, path);
  120. }
  121. }


读取配置文件到Java POJO


  1. package com.ll.myThreadStudy.MyThread;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import org.apache.log4j.Logger;
  7. import org.jdom.Element;
  8. import org.jdom.input.SAXBuilder;
  9. import org.jdom.xpath.XPath;
  10. public class XmlToConfigVO {
  11. private static Logger logger = Logger.getLogger(XmlToConfigVO.class);
  12. public static MyConfigVo getLogSystemConfigVO(String fileName) {
  13. try {
  14. Element rootEle = new SAXBuilder().build(new File(fileName))
  15. .getRootElement();
  16. MyConfigVo myConfigVo = new MyConfigVo();
  17. //获取单个节点值的内容
  18. myConfigVo.setStringValue(XMLOperatorUtils
  19. .getElementTextStringValueFromRoot(rootEle,
  20. "/config/base-config/stringValue"));
  21. myConfigVo.setIntegerValue(XMLOperatorUtils
  22. .getElementTextIntegerValueFromRoot(rootEle,
  23. "/config/base-config/integerValue"));
  24. myConfigVo.setLongValue(XMLOperatorUtils
  25. .getElementTextLongValueFromRoot(rootEle,
  26. "/config/base-config/longValue"));
  27. //获取多个节点值
  28. HashMap<Integer, BookVo> booksMap = new HashMap<Integer, BookVo>();
  29. for (Object element : XPath.selectNodes(rootEle,"/config/books/book")) {
  30. BookVo book = new BookVo();
  31. book.setId(XMLOperatorUtils.getElementAttributeIntegerValue((Element) element,"id"));
  32. book.setName(XMLOperatorUtils.getElementTextStringValueByElement((Element) element,"name"));
  33. book.setPrice(XMLOperatorUtils.getElementTextLongValueByElement((Element) element,"price"));
  34. booksMap.put(book.getId(),book);
  35. }
  36. myConfigVo.setBooksMap(booksMap);
  37. List<ComputerVo> computerList= new ArrayList<ComputerVo>();
  38. for (Object element : XPath.selectNodes(rootEle,"/config/computers/computer")) {
  39. ComputerVo computer = new ComputerVo();
  40. computer.setType(XMLOperatorUtils.getElementAttributeStringValue((Element) element, "type"));
  41. computer.setSize(XMLOperatorUtils.getElementAttributeStringValue((Element) element,"size"));
  42. computerList.add(computer);
  43. }
  44. myConfigVo.setComputerList(computerList);
  45. return myConfigVo;
  46. } catch (Exception e) {
  47. logger.error(e);
  48. }
  49. return null;
  50. }
  51. }


完整程序



  1. package com.ll.myThreadStudy.MyThread;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. public class MyConfigVo {
  6. private String stringValue;
  7. private Integer integerValue;
  8. private Long longValue;
  9. private HashMap<Integer, BookVo> booksMap = new HashMap<Integer, BookVo>();
  10. private List<ComputerVo> computerList = new ArrayList<ComputerVo>();
  11. public String getStringValue() {
  12. return stringValue;
  13. }
  14. public void setStringValue(String stringValue) {
  15. this.stringValue = stringValue;
  16. }
  17. public Integer getIntegerValue() {
  18. return integerValue;
  19. }
  20. public void setIntegerValue(Integer integerValue) {
  21. this.integerValue = integerValue;
  22. }
  23. public Long getLongValue() {
  24. return longValue;
  25. }
  26. public void setLongValue(Long longValue) {
  27. this.longValue = longValue;
  28. }
  29. public HashMap<Integer, BookVo> getBooksMap() {
  30. return booksMap;
  31. }
  32. public void setBooksMap(HashMap<Integer, BookVo> booksMap) {
  33. this.booksMap = booksMap;
  34. }
  35. public List<ComputerVo> getComputerList() {
  36. return computerList;
  37. }
  38. public void setComputerList(List<ComputerVo> computerList) {
  39. this.computerList = computerList;
  40. }
  41. @Override
  42. public int hashCode() {
  43. final int prime = 31;
  44. int result = 1;
  45. result = prime * result
  46. + ((booksMap == null) ? 0 : booksMap.hashCode());
  47. result = prime * result
  48. + ((computerList == null) ? 0 : computerList.hashCode());
  49. result = prime * result
  50. + ((integerValue == null) ? 0 : integerValue.hashCode());
  51. result = prime * result
  52. + ((longValue == null) ? 0 : longValue.hashCode());
  53. result = prime * result
  54. + ((stringValue == null) ? 0 : stringValue.hashCode());
  55. return result;
  56. }
  57. @Override
  58. public String toString() {
  59. return "MyConfigVo [stringValue=" + stringValue + ", integerValue="
  60. + integerValue + ", longValue=" + longValue + ", booksMap="
  61. + booksMap + ", computerList=" + computerList + "]";
  62. }
  63. @Override
  64. public boolean equals(Object obj) {
  65. if (this == obj)
  66. return true;
  67. if (obj == null)
  68. return false;
  69. if (getClass() != obj.getClass())
  70. return false;
  71. MyConfigVo other = (MyConfigVo) obj;
  72. if (booksMap == null) {
  73. if (other.booksMap != null)
  74. return false;
  75. } else if (!booksMap.equals(other.booksMap))
  76. return false;
  77. if (computerList == null) {
  78. if (other.computerList != null)
  79. return false;
  80. } else if (!computerList.equals(other.computerList))
  81. return false;
  82. if (integerValue == null) {
  83. if (other.integerValue != null)
  84. return false;
  85. } else if (!integerValue.equals(other.integerValue))
  86. return false;
  87. if (longValue == null) {
  88. if (other.longValue != null)
  89. return false;
  90. } else if (!longValue.equals(other.longValue))
  91. return false;
  92. if (stringValue == null) {
  93. if (other.stringValue != null)
  94. return false;
  95. } else if (!stringValue.equals(other.stringValue))
  96. return false;
  97. return true;
  98. }
  99. }


  1. package com.ll.myThreadStudy.MyThread;
  2. public class ComputerVo {
  3. private String type;
  4. private String size;
  5. public String getType() {
  6. return type;
  7. }
  8. public void setType(String type) {
  9. this.type = type;
  10. }
  11. public String getSize() {
  12. return size;
  13. }
  14. public void setSize(String size) {
  15. this.size = size;
  16. }
  17. @Override
  18. public String toString() {
  19. return "ComputerVo [type=" + type + ", size=" + size + "]";
  20. }
  21. }


  1. package com.ll.myThreadStudy.MyThread;
  2. public class BookVo {
  3. private Integer id;
  4. private String name;
  5. private Long price;
  6. public Integer getId() {
  7. return id;
  8. }
  9. public void setId(Integer id) {
  10. this.id = id;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public Long getPrice() {
  19. return price;
  20. }
  21. public void setPrice(Long price) {
  22. this.price = price;
  23. }
  24. @Override
  25. public String toString() {
  26. return "BookVo [id=" + id + ", name=" + name + ", price=" + price + "]";
  27. }
  28. }


测试文件


  1. package com.ll.myThreadStudy.MyThread;
  2. public class Main {
  3. public static void main(String args[]) {
  4. MyConfigVo myConfigVo = XmlToConfigVO.getLogSystemConfigVO("d:\\myConfig.xml");
  5. System.out.println(myConfigVo);
  6. }
  7. }


测试结果





附件列表

【XML配置文件读取】使用jdom读取XML配置文件信息的更多相关文章

  1. web.xml中通过contextConfigLocation的读取spring的配置文件

    web.xml中通过contextConfigLocation的读取spring的配置文件 博客分类: web.xml contextConfigLocationcontextparamxmlvalu ...

  2. spring boot 项目从配置文件中读取maven 的pom.xml 文件标签的内容。

    需求: 将pom.xml 文件中的版本号读取到配置文件并打印到日志中. 第一步: 在pom.xml 中添加以下标签. 第二步: 将version 标签的值读取到配置文件中 这里使用 @@  而不是  ...

  3. 使用JDom解析XML文档模拟Spring的配置文件解析

    在J2EE项目中可能会涉及到一些框架的使用,最近接触到了SSH,拿Spring来说配置文件的使用是相当重要的,Spring的配置文件是一个xml文件,Spring是如何读取到配置文件并进行依赖注入的呢 ...

  4. Jdom读取XML文件

    学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方式--Jdom 首先我们到Jdo ...

  5. 用JDOM读取XML文件

    用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...

  6. JDOM读取xml

    [摘 要]JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作. 一.JDOM 简介 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术 ...

  7. mybatis源码-解析配置文件(一)之XML的DOM解析方式

    目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...

  8. 配置文件——App.config文件读取和修改

    作为普通的xml文件读取的话,首先就要知道怎么寻找文件的路径.我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.Ex ...

  9. Asp.Net Core 3.1学习-读取、监听json配置文件(7)

    1.前言 文件配置提供程序默认的给我们提供了ini.json.Xml等.都是读取不同格式的文件.文件配置提供程序支持文件可寻.必选.文件变更的监视. 2.读取配置文件 主要运用的包:需要Ini.xml ...

  10. Java中XML格式的字符串4读取方式的简单比较

    Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...

随机推荐

  1. 阅读学术论文的心得体会from小木虫

    我们搞科研的很重要的一个环节就是文献的阅读!关于如何阅读文献?读什么,怎么读?结合我自己的体会,我想这里的关键在于要让我们通过这种方式的学习,学会看懂作者的思想.思路和科学方法,从中学习论文作者发现问 ...

  2. 【转】eclipse集成开发工具的插件安装

    转发一:打开Eclipse下载地址(http://www.eclipse.org/downloads/),可以看到有好多版本的Eclipse可供下载,初学者往往是一头雾水,不知道下载哪一个版本. 各个 ...

  3. 面向过程部分 Java 和 C++ 的区别

    前言 Java 和 C++ 在面向过程部分区别并不大,但还是有的,本文罗列了这些区别. 在 Java 中: 1. 数据类型的范围和机器无关 2. 加上前缀 0b 可以表示二进制数,如 0b1001 就 ...

  4. Nginx技巧:灵活的server_name,Nginx配置一个服务器多个站点 和 一个站点多个二级域名

    http://www.cnblogs.com/buffer/archive/2011/08/17/2143514.html Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活 ...

  5. Apache搭建多个站点方法详解

    www.111cn.net 编辑:Bolshevik 来源:转载 Apache的虚拟主机是一种允许在同一台机器上配置多个不同站点的web服务器环境的,就是iis一样可以创建多站点了,但是apache需 ...

  6. Sublime text2如何设置快捷键让编写的HTML文件在浏览器预览?

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:浪人链接:http://www.zhihu.com/question/27219231/answer/43608776来源:知 ...

  7. springmvc学习笔记---idea创建springmvc项目

    前言: 真的是很久没搞java的web服务开发了, 最近一次搞还是读研的时候, 想来感慨万千. 英雄没落, Eclipse的盟主地位隐隐然有被IntelliJ IDEA超越的趋势. Spring从2. ...

  8. ZOJ 1151 Word Reversal

    原题链接 题目大意:给一句话,把每个单词倒序,然后输出. 解法:我是用了一个堆栈,以空格来拆分单词,把每个字母压入堆栈,然后依次输出. 参考代码: /* * 字符串反向,140ms,188kb * 单 ...

  9. 横向滚动条展示 css

    <div class="shuaixuan" style="overflow:hidden;">    <div style="ov ...

  10. 精美的HTML5 Loadding页面

    以前我们大部分的Loading动画都是利用gif图片实现的,这种图片实现Loading动画的方法虽然也很不错,但是作为HTML5开发者来说,如果能利用HTML5和CSS3实现这些超酷的Loading动 ...