1. 说明
在项目中,我们需要将一些可能会变动的信息配置在一份XML的文件中。这样,即时信息变动了也不需要修改代码,只要修改配置文件就行了。比如,我们在创建线程池时,我们会将创建线程池需要的corePoolSize、maxinumPoolSize、keepAliveTime等参数配置到指定的配置文件中,这样对于不同的项目,我们可以选用不同的参数。所以,本次的博客笔者主要向大家介绍如何解析一份XML的文件。
2. JDOM介绍
Jdom是使用XML的java工具包,我们经常会用它来解析XML的文件,给我们的开发带来的一定的方便。在开发过程中,我们经常用使用SAXBuild,这个是一个解析器。我们创建一个JDOM文档时,实际上就是作SAX解析来解析的。所以我们会用到SAXBuild的build函数来处理文件。Build函数处理后的返回一个Document的对象,也就是XML的文件。之后,我们就可以通过Document的getRootElement的函数来获取根节点,再通过getChildren函数获取子节点。如果有多个子节点,就可将当前子节点作为根节点,以此类推。
3. 代码
**
* 解析XML的文件,将解析的信息存在到Map中,随时都可以获取
*
* @author OwenWilliam
* @Date 2017-4-19
*
*/
public class ResolveXML
{
@SuppressWarnings("unchecked")
public static HashMap<Object, HashMap<Object, Object>> getXMLInfo(String fileName)
{
if (fileName != null)
{
try
{
SAXBuilder saxbuilder = new SAXBuilder();// 解析器
Document document = saxbuilder.build(new FileInputStream(fileName));// 处理文件
Element element = document.getRootElement();// 根节点 </configs>
List<Object> list = element.getChildren();// 子节点 </config>
HashMap<Object, HashMap<Object, Object>> resultMap = new HashMap<Object, HashMap<Object, Object>>();// 存放最终结果
for (int i = 0; i < list.size(); i++)
{
Element element2 = (Element) list.get(i);// 将这个</config>子节点当作根节点
List<Object> list2 = element2.getChildren();// 子节点</item>
if ((list2 == null) || (list2.size() <= 0))
continue;
HashMap<Object, Object> map = new HashMap<Object, Object>();
for (int j = 0; j < list2.size(); j++)
{
Element localElement3 = (Element) list2.get(j);
String id = localElement3.getAttribute("id").getValue();// 获取id值
map.put(id, localElement3.getText());// 标签中的内容
resultMap.put(element2.getAttribute("id").getValue(), map);//对应的</config>标签id
}
}
return resultMap;
} catch (Exception localException)
{
localException.printStackTrace();
}
}
return null;
}
public static void main(String[] args)
{
String fileName = System.getProperty("user.dir")
+ "/config/userInfo.xml";
HashMap<Object, HashMap<Object, Object>> info = getXMLInfo(fileName);
HashMap<Object, Object> userInfo = (HashMap<Object, Object>) info.get("userInfo");
System.out.println(userInfo.get("Owen"));
System.out.println(userInfo.get("Rubby"));
System.out.println(userInfo.get("Hanks"));
}
}
源码地址:git@github.com:owenwilliam/BuilderXML.git