【XML配置文件读取】使用jdom读取XML配置文件信息
配置文件信息
<?xml version="1.0" encoding="UTF-8"?>
<config>
<base-config>
<stringValue>Hello world</stringValue>
<integerValue>8</integerValue>
<longValue>32768</longValue>
</base-config>
<books>
<book id="111">
<name>Java 编程</name>
<price>33</price>
</book>
<book id="222">
<name>Spring学习指南</name>
<price>55</price>
</book>
</books>
<computers>
<computer type="dell" size="14寸" />
<computer type="thinkpad" size="16寸" />
<computer type="apple" size="22寸" />
</computers>
</config>
需要的Jar包(MAVEN给出)
完整的POM文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ll</groupId>
<artifactId>myThreadStudy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>myThreadStudy</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junitVersion>3.8.1</junitVersion>
<commons-io-Version>2.4</commons-io-Version>
<jaxenVersion>1.1.1</jaxenVersion>
<jdomVersion>1.1</jdomVersion>
<log4jVersion>1.2.17</log4jVersion>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junitVersion}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io-Version}</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>${jdomVersion}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4jVersion}</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>${jaxenVersion}</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding> <!-- “编码 GBK 的不可映射字符”问题的解决 -->
</configuration>
</plugin>
</plugins>
</build>
</project>
通用的XML操作类(XMLOperatorUtils.java)
package com.ll.myThreadStudy.MyThread;
import java.util.List;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.xpath.XPath;
public class XMLOperatorUtils {
public static String getElementAttributeStringValue(Element element,
String AttributeName) {
try {
return element.getAttributeValue(AttributeName);
} catch (Exception e) {
return null;
}
}
public static Integer getElementAttributeIntegerValue(Element element,
String AttributeName) {
try {
return Integer.parseInt(getElementAttributeStringValue(element,
AttributeName));
} catch (Exception e) {
return -1;
}
}
public static Long getElementAttributeLongValue(Element element,
String AttributeName) {
try {
return Long.parseLong(getElementAttributeStringValue(element,
AttributeName));
} catch (Exception e) {
return -1l;
}
}
public static Boolean getElementAttributeBooleanValue(Element element,
String AttributeName) {
try {
return Boolean.parseBoolean(getElementAttributeStringValue(element,
AttributeName));
} catch (Exception e) {
return false;
}
}
public static String getElementTextStringValueFromRoot(Element rootEle,
String path) {
try {
return ((Element) getSingleNode(rootEle, path)).getTextTrim();
} catch (Exception e) {
return null;
}
}
public static Integer getElementTextIntegerValueFromRoot(Element rootEle,
String path) {
try {
return Integer.parseInt(getElementTextStringValueFromRoot(rootEle,
path));
} catch (Exception e) {
return -1;
}
}
public static Long getElementTextLongValueFromRoot(Element rootEle,
String path) {
try {
return Long.parseLong(getElementTextStringValueFromRoot(rootEle,
path));
} catch (Exception e) {
return -1l;
}
}
public static Boolean getElementTextBooleanValueFromRoot(Element rootEle,
String path) {
try {
return Boolean.parseBoolean(getElementTextStringValueFromRoot(
rootEle, path));
} catch (Exception e) {
return false;
}
}
public static String getElementTextStringValueByElement(Element element,
String childName) {
try {
return element.getChildText(childName);
} catch (Exception e) {
return null;
}
}
protected static Integer getElementTextIntegerValueByElement(
Element element, String childName) {
try {
return Integer.parseInt(getElementTextStringValueByElement(element,
childName));
} catch (Exception e) {
return -1;
}
}
protected static Long getElementTextLongValueByElement(Element element,
String childName) {
try {
return Long.parseLong(getElementTextStringValueByElement(element,
childName));
} catch (Exception e) {
return -1l;
}
}
protected static Boolean getElementTextBooleanValueByElement(
Element element, String childName) {
try {
return Boolean.parseBoolean(getElementTextStringValueByElement(
element, childName));
} catch (Exception e) {
return false;
}
}
protected static Object getSingleNode(Element rootEle, String path)
throws JDOMException {
return XPath.selectSingleNode(rootEle, path);
}
@SuppressWarnings("rawtypes")
protected static List getNodes(Element rootEle, String path)
throws JDOMException {
return XPath.selectNodes(rootEle, path);
}
}
读取配置文件到Java POJO
package com.ll.myThreadStudy.MyThread;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
public class XmlToConfigVO {
private static Logger logger = Logger.getLogger(XmlToConfigVO.class);
public static MyConfigVo getLogSystemConfigVO(String fileName) {
try {
Element rootEle = new SAXBuilder().build(new File(fileName))
.getRootElement();
MyConfigVo myConfigVo = new MyConfigVo();
//获取单个节点值的内容
myConfigVo.setStringValue(XMLOperatorUtils
.getElementTextStringValueFromRoot(rootEle,
"/config/base-config/stringValue"));
myConfigVo.setIntegerValue(XMLOperatorUtils
.getElementTextIntegerValueFromRoot(rootEle,
"/config/base-config/integerValue"));
myConfigVo.setLongValue(XMLOperatorUtils
.getElementTextLongValueFromRoot(rootEle,
"/config/base-config/longValue"));
//获取多个节点值
HashMap<Integer, BookVo> booksMap = new HashMap<Integer, BookVo>();
for (Object element : XPath.selectNodes(rootEle,"/config/books/book")) {
BookVo book = new BookVo();
book.setId(XMLOperatorUtils.getElementAttributeIntegerValue((Element) element,"id"));
book.setName(XMLOperatorUtils.getElementTextStringValueByElement((Element) element,"name"));
book.setPrice(XMLOperatorUtils.getElementTextLongValueByElement((Element) element,"price"));
booksMap.put(book.getId(),book);
}
myConfigVo.setBooksMap(booksMap);
List<ComputerVo> computerList= new ArrayList<ComputerVo>();
for (Object element : XPath.selectNodes(rootEle,"/config/computers/computer")) {
ComputerVo computer = new ComputerVo();
computer.setType(XMLOperatorUtils.getElementAttributeStringValue((Element) element, "type"));
computer.setSize(XMLOperatorUtils.getElementAttributeStringValue((Element) element,"size"));
computerList.add(computer);
}
myConfigVo.setComputerList(computerList);
return myConfigVo;
} catch (Exception e) {
logger.error(e);
}
return null;
}
}
完整程序
package com.ll.myThreadStudy.MyThread;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyConfigVo {
private String stringValue;
private Integer integerValue;
private Long longValue;
private HashMap<Integer, BookVo> booksMap = new HashMap<Integer, BookVo>();
private List<ComputerVo> computerList = new ArrayList<ComputerVo>();
public String getStringValue() {
return stringValue;
}
public void setStringValue(String stringValue) {
this.stringValue = stringValue;
}
public Integer getIntegerValue() {
return integerValue;
}
public void setIntegerValue(Integer integerValue) {
this.integerValue = integerValue;
}
public Long getLongValue() {
return longValue;
}
public void setLongValue(Long longValue) {
this.longValue = longValue;
}
public HashMap<Integer, BookVo> getBooksMap() {
return booksMap;
}
public void setBooksMap(HashMap<Integer, BookVo> booksMap) {
this.booksMap = booksMap;
}
public List<ComputerVo> getComputerList() {
return computerList;
}
public void setComputerList(List<ComputerVo> computerList) {
this.computerList = computerList;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((booksMap == null) ? 0 : booksMap.hashCode());
result = prime * result
+ ((computerList == null) ? 0 : computerList.hashCode());
result = prime * result
+ ((integerValue == null) ? 0 : integerValue.hashCode());
result = prime * result
+ ((longValue == null) ? 0 : longValue.hashCode());
result = prime * result
+ ((stringValue == null) ? 0 : stringValue.hashCode());
return result;
}
@Override
public String toString() {
return "MyConfigVo [stringValue=" + stringValue + ", integerValue="
+ integerValue + ", longValue=" + longValue + ", booksMap="
+ booksMap + ", computerList=" + computerList + "]";
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyConfigVo other = (MyConfigVo) obj;
if (booksMap == null) {
if (other.booksMap != null)
return false;
} else if (!booksMap.equals(other.booksMap))
return false;
if (computerList == null) {
if (other.computerList != null)
return false;
} else if (!computerList.equals(other.computerList))
return false;
if (integerValue == null) {
if (other.integerValue != null)
return false;
} else if (!integerValue.equals(other.integerValue))
return false;
if (longValue == null) {
if (other.longValue != null)
return false;
} else if (!longValue.equals(other.longValue))
return false;
if (stringValue == null) {
if (other.stringValue != null)
return false;
} else if (!stringValue.equals(other.stringValue))
return false;
return true;
}
}
package com.ll.myThreadStudy.MyThread;
public class ComputerVo {
private String type;
private String size;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
@Override
public String toString() {
return "ComputerVo [type=" + type + ", size=" + size + "]";
}
}
package com.ll.myThreadStudy.MyThread;
public class BookVo {
private Integer id;
private String name;
private Long price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
@Override
public String toString() {
return "BookVo [id=" + id + ", name=" + name + ", price=" + price + "]";
}
}
测试文件
package com.ll.myThreadStudy.MyThread;
public class Main {
public static void main(String args[]) {
MyConfigVo myConfigVo = XmlToConfigVO.getLogSystemConfigVO("d:\\myConfig.xml");
System.out.println(myConfigVo);
}
}
测试结果
附件列表
【XML配置文件读取】使用jdom读取XML配置文件信息的更多相关文章
- web.xml中通过contextConfigLocation的读取spring的配置文件
web.xml中通过contextConfigLocation的读取spring的配置文件 博客分类: web.xml contextConfigLocationcontextparamxmlvalu ...
- spring boot 项目从配置文件中读取maven 的pom.xml 文件标签的内容。
需求: 将pom.xml 文件中的版本号读取到配置文件并打印到日志中. 第一步: 在pom.xml 中添加以下标签. 第二步: 将version 标签的值读取到配置文件中 这里使用 @@ 而不是 ...
- 使用JDom解析XML文档模拟Spring的配置文件解析
在J2EE项目中可能会涉及到一些框架的使用,最近接触到了SSH,拿Spring来说配置文件的使用是相当重要的,Spring的配置文件是一个xml文件,Spring是如何读取到配置文件并进行依赖注入的呢 ...
- Jdom读取XML文件
学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方式--Jdom 首先我们到Jdo ...
- 用JDOM读取XML文件
用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...
- JDOM读取xml
[摘 要]JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作. 一.JDOM 简介 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术 ...
- mybatis源码-解析配置文件(一)之XML的DOM解析方式
目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...
- 配置文件——App.config文件读取和修改
作为普通的xml文件读取的话,首先就要知道怎么寻找文件的路径.我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.Ex ...
- Asp.Net Core 3.1学习-读取、监听json配置文件(7)
1.前言 文件配置提供程序默认的给我们提供了ini.json.Xml等.都是读取不同格式的文件.文件配置提供程序支持文件可寻.必选.文件变更的监视. 2.读取配置文件 主要运用的包:需要Ini.xml ...
- Java中XML格式的字符串4读取方式的简单比较
Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...
随机推荐
- 阅读学术论文的心得体会from小木虫
我们搞科研的很重要的一个环节就是文献的阅读!关于如何阅读文献?读什么,怎么读?结合我自己的体会,我想这里的关键在于要让我们通过这种方式的学习,学会看懂作者的思想.思路和科学方法,从中学习论文作者发现问 ...
- 【转】eclipse集成开发工具的插件安装
转发一:打开Eclipse下载地址(http://www.eclipse.org/downloads/),可以看到有好多版本的Eclipse可供下载,初学者往往是一头雾水,不知道下载哪一个版本. 各个 ...
- 面向过程部分 Java 和 C++ 的区别
前言 Java 和 C++ 在面向过程部分区别并不大,但还是有的,本文罗列了这些区别. 在 Java 中: 1. 数据类型的范围和机器无关 2. 加上前缀 0b 可以表示二进制数,如 0b1001 就 ...
- Nginx技巧:灵活的server_name,Nginx配置一个服务器多个站点 和 一个站点多个二级域名
http://www.cnblogs.com/buffer/archive/2011/08/17/2143514.html Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活 ...
- Apache搭建多个站点方法详解
www.111cn.net 编辑:Bolshevik 来源:转载 Apache的虚拟主机是一种允许在同一台机器上配置多个不同站点的web服务器环境的,就是iis一样可以创建多站点了,但是apache需 ...
- Sublime text2如何设置快捷键让编写的HTML文件在浏览器预览?
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:浪人链接:http://www.zhihu.com/question/27219231/answer/43608776来源:知 ...
- springmvc学习笔记---idea创建springmvc项目
前言: 真的是很久没搞java的web服务开发了, 最近一次搞还是读研的时候, 想来感慨万千. 英雄没落, Eclipse的盟主地位隐隐然有被IntelliJ IDEA超越的趋势. Spring从2. ...
- ZOJ 1151 Word Reversal
原题链接 题目大意:给一句话,把每个单词倒序,然后输出. 解法:我是用了一个堆栈,以空格来拆分单词,把每个字母压入堆栈,然后依次输出. 参考代码: /* * 字符串反向,140ms,188kb * 单 ...
- 横向滚动条展示 css
<div class="shuaixuan" style="overflow:hidden;"> <div style="ov ...
- 精美的HTML5 Loadding页面
以前我们大部分的Loading动画都是利用gif图片实现的,这种图片实现Loading动画的方法虽然也很不错,但是作为HTML5开发者来说,如果能利用HTML5和CSS3实现这些超酷的Loading动 ...