首页 > 代码库 > 使用Dom4j解析XML文档

使用Dom4j解析XML文档

最近将项目中需要将一些配置信息写入XML文件中,程序运行时从XML文档中读取需要的信息,对于读取XML文档中的信息,决定使用DOM4J来解析XML。

在XML中一开始只是存储ip和port的信息。格式如下:

<root>
	<server>
		<ip>172.16.111.86</ip>
		<port>9999</port>
	</server>
</root>
一开始时候读取出来的信息是ip:port类型的字符串最为返回值,如果需要单独的ip或者port时在根据“:”使用字符串分割。

但是后来因为业务需求对XML中额外加入几个属性,在需要时将他读取出来,改动后的XML格式如下:

<root>
	<server>
		<name>测试环境</name>
		<ip>172.16.111.86</ip>
		<port>9999</port>
		<bind>check,check1</bind>
	</server>
</root>
这时在采用以前读取方式是不行的,最终决定使用Map对象来存储标签和值的映射关系,最终返回一个Map对象,需要某一值时,从Map对象中使用get方法即可获得。具体方法如下:

/**
 * 读取指定的XML文件,并返回相应的值
 * XML解析使用DOM4J
 * @author Administrator
 */
public class XMLRead{
	/**
	 * 将需要读取xml文档中的标签名和值存放到Map中并返回
	 * @param file 需要读取的xml文件
	 * @return 存储结果
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, String> readFile(File file,String node){
		Map<String, String> result = new HashMap<String, String>();
		try {
			//创建SAXReader对象
			SAXReader reader = new SAXReader();
			//使用SAXReader对象的read方法创建Document对象。
			Document doc = reader.read(file);
			//获取根元素对象
			Element root = doc.getRootElement();
			//获取指定节点
			Element relm = root.element(node);
			//所有节点的名称
			List<Element> elms = relm.elements();
			Iterator<Element> iterator = elms.iterator();
			while(iterator.hasNext()){
				Element elm = iterator.next();
				result.put(elm.getName(), elm.getText());
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return result;
	}
}


使用Dom4j解析XML文档