解析XML文件信息

xiaoxiao2021-02-28  87

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
转载请注明原文地址: https://www.6miu.com/read-84590.html

最新回复(0)