天天看點

使用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;
	}
}
           

繼續閱讀