解析XML文件信息

来源:互联网 发布:伊修巴尔歼灭战 知乎 编辑:程序博客网 时间:2024/06/17 18:29

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
0 0
原创粉丝点击