更新時間:2020-11-30 17:44:45 來源:動力節點 瀏覽1914次
XML可用于交換數據。基于XML可以在不兼容的系統之間交換數據,計算機系統和數據庫系統所存儲的數據有多種形式,對于開發者來說,最耗時間的工作就是在遍布網絡的系統之間交換數據。把數據轉換為XML格式存儲將大大減少交換數據時的復雜性,還可以使這些數據能被不同的程序讀取。本文我們就來談一談XML數據交互。
為了更好地理解XML數據交互,我們先來了解什么是數據交互。數據交換是指為了滿足不同信息系統之間數據資源的共享需要,依據一定的原則,采取相應的技術,實現不同信息系統之間數據資源共享的過程。
1、客戶端與服務器常用數據交互格式有xml、json、html。
2、數據交互格式應用場景
移動端(安卓、IOS)通訊方式采用http協議+JSON格式走restful風格。
很多互聯網項目都采用Http協議+JSON
因為xml比較重WebService服務采用http+xml格式銀行項目使用比較多
我們先以一張圖來初步了解XML的數據傳輸:
如圖所示:
3、XML數據傳輸過程中的組件功能
服務器端:
服務器端組件主要完成以下三個功能:
第一:網絡監聽功能
當接收到客戶端傳來的請求時,會觸發一個監聽事件,在這一事件的處理代碼中得到客戶端的查詢請求,然后執行數據庫操作
第二:查詢數據庫功能
得到客戶端的請求內容,在進入所在的數據庫里查詢到客戶端所需要的內容,一般是把查詢結果放進一個Map集合當中
第三:將查詢結果封裝成xml文件格式發送給客戶端
為了把map集合轉換成xml格式的文件,我們需要用到以下代碼實例:
代碼如下:
/**
?????* map轉xml
?????* @param map
?????* @param body xml元素
?????* @return
?????*/ ?
????private static Element map2xml(Map<String, Object> map, Element body) { ?
????????Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator(); ?
????????while (entries.hasNext()) { ?
????????????Map.Entry<String, Object> entry = entries.next(); ?
????????????String key = entry.getKey(); ?
????????????Object value = entry.getValue(); ?
????????????if(key.startsWith("@")){ ???//屬性 ?
????????????????body.addAttribute(key.substring(1, key.length()), value.toString()); ?
????????????} else if(key.equals("#text")){ //有屬性時的文本 ?
????????????????body.setText(value.toString()); ?
????????????} else { ?
????????????????if(value instanceof java.util.List ){ ?
????????????????????List list = (List)value; ?
????????????????????Object obj; ?
????????????????????for(int i=0; i<list.size(); i++){ ?
????????????????????????obj = list.get(i); ?
????????????????????????//list里是map或String,不會存在list里直接是list的, ?
????????????????????????if(obj instanceof java.util.Map){ ?
????????????????????????????Element subElement = body.addElement(key); ?
????????????????????????????map2xml((Map)list.get(i), subElement); ?
????????????????????????} else { ?
????????????????????????????body.addElement(key).setText((String)list.get(i)); ?
????????????????????????} ?
????????????????????} ?
????????????????} else if(value instanceof java.util.Map ){ ?
????????????????????Element subElement = body.addElement(key); ?
????????????????????map2xml((Map)value, subElement); ?
????????????????} else { ?
????????????????????body.addElement(key).setText(value.toString()); ?
????????????????} ?
????????????} ?
????????????//System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); ?
????????} ?
????????return body; ?
????} ?
客戶端:
客戶端的組件主要完成以下三個方面的工作:
第一:與服務器端建立連接
通過服務器端的監聽程序建立連接
第二:發送查詢請求
用戶在客戶端發出查詢請求,通過建立的連接把請求發送到服務器端
第三:接收服務器端返回的xml文件,一般都是把它轉換為Map集合的形式,并從中提取出所需的各項數據
為了把xml格式的文件轉換成map集合,我們需要用到以下代碼實例:
代碼如下:
將XML文檔轉換為Map集合,方式也比較多,下面這種方式是DOM4J的方式:
Map<String, String> map=new HashMap<String,String>();
try {
InputStream is = new FileInputStream(new File("config.xml"));
SAXReader sax=new SAXReader(); //創建解析器
Document doc=sax.read(is); //創建對應的Document對象
Element root=doc.getRootElement(); //獲取XML文檔的根節點對象
List<Element> list = root.elements();
//獲取根節點下的所有的子節點
for (Element ele : list) { //遍歷根節點下的所有子節點并將其放入MAP對象中
map.put(ele.getName(), ele.getText());
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
XML除了用于交互數據,還可以從HTML中分離數據,甚至XML可以用于創建新的語言。總之,XML使用一個簡單而又靈活的標準格式,為基于Web的應用提供了一個描述數據和交換數據的有效手段。你是否被XML語言的強大所折服呢,還在等什么,快來觀看本站的XML教程開始你的XML學習之旅吧!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習