最近将項目中需要将一些配置資訊寫入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;
}
}