更新時(shí)間:2020-11-30 17:44:45 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1980次
XML可用于交換數(shù)據(jù)。基于XML可以在不兼容的系統(tǒng)之間交換數(shù)據(jù),計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)所存儲(chǔ)的數(shù)據(jù)有多種形式,對(duì)于開發(fā)者來說,最耗時(shí)間的工作就是在遍布網(wǎng)絡(luò)的系統(tǒng)之間交換數(shù)據(jù)。把數(shù)據(jù)轉(zhuǎn)換為XML格式存儲(chǔ)將大大減少交換數(shù)據(jù)時(shí)的復(fù)雜性,還可以使這些數(shù)據(jù)能被不同的程序讀取。本文我們就來談一談XML數(shù)據(jù)交互。
為了更好地理解XML數(shù)據(jù)交互,我們先來了解什么是數(shù)據(jù)交互。數(shù)據(jù)交換是指為了滿足不同信息系統(tǒng)之間數(shù)據(jù)資源的共享需要,依據(jù)一定的原則,采取相應(yīng)的技術(shù),實(shí)現(xiàn)不同信息系統(tǒng)之間數(shù)據(jù)資源共享的過程。
1、客戶端與服務(wù)器常用數(shù)據(jù)交互格式有xml、json、html。
2、數(shù)據(jù)交互格式應(yīng)用場(chǎng)景
移動(dòng)端(安卓、IOS)通訊方式采用http協(xié)議+JSON格式走restful風(fēng)格。
很多互聯(lián)網(wǎng)項(xiàng)目都采用Http協(xié)議+JSON
因?yàn)閤ml比較重WebService服務(wù)采用http+xml格式銀行項(xiàng)目使用比較多
我們先以一張圖來初步了解XML的數(shù)據(jù)傳輸:
如圖所示:
3、XML數(shù)據(jù)傳輸過程中的組件功能
服務(wù)器端:
服務(wù)器端組件主要完成以下三個(gè)功能:
第一:網(wǎng)絡(luò)監(jiān)聽功能
當(dāng)接收到客戶端傳來的請(qǐng)求時(shí),會(huì)觸發(fā)一個(gè)監(jiān)聽事件,在這一事件的處理代碼中得到客戶端的查詢請(qǐng)求,然后執(zhí)行數(shù)據(jù)庫(kù)操作
第二:查詢數(shù)據(jù)庫(kù)功能
得到客戶端的請(qǐng)求內(nèi)容,在進(jìn)入所在的數(shù)據(jù)庫(kù)里查詢到客戶端所需要的內(nèi)容,一般是把查詢結(jié)果放進(jìn)一個(gè)Map集合當(dāng)中
第三:將查詢結(jié)果封裝成xml文件格式發(fā)送給客戶端
為了把map集合轉(zhuǎn)換成xml格式的文件,我們需要用到以下代碼實(shí)例:
代碼如下:
/**
?????* map轉(zhuǎn)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")){ //有屬性時(shí)的文本 ?
????????????????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,不會(huì)存在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; ?
????} ?
客戶端:
客戶端的組件主要完成以下三個(gè)方面的工作:
第一:與服務(wù)器端建立連接
通過服務(wù)器端的監(jiān)聽程序建立連接
第二:發(fā)送查詢請(qǐng)求
用戶在客戶端發(fā)出查詢請(qǐng)求,通過建立的連接把請(qǐng)求發(fā)送到服務(wù)器端
第三:接收服務(wù)器端返回的xml文件,一般都是把它轉(zhuǎn)換為Map集合的形式,并從中提取出所需的各項(xiàng)數(shù)據(jù)
為了把xml格式的文件轉(zhuǎn)換成map集合,我們需要用到以下代碼實(shí)例:
代碼如下:
將XML文檔轉(zhuǎn)換為Map集合,方式也比較多,下面這種方式是DOM4J的方式:
Map<String, String> map=new HashMap<String,String>();
try {
InputStream is = new FileInputStream(new File("config.xml"));
SAXReader sax=new SAXReader(); //創(chuàng)建解析器
Document doc=sax.read(is); //創(chuàng)建對(duì)應(yīng)的Document對(duì)象
Element root=doc.getRootElement(); //獲取XML文檔的根節(jié)點(diǎn)對(duì)象
List<Element> list = root.elements();
//獲取根節(jié)點(diǎn)下的所有的子節(jié)點(diǎn)
for (Element ele : list) { //遍歷根節(jié)點(diǎn)下的所有子節(jié)點(diǎn)并將其放入MAP對(duì)象中
map.put(ele.getName(), ele.getText());
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
XML除了用于交互數(shù)據(jù),還可以從HTML中分離數(shù)據(jù),甚至XML可以用于創(chuàng)建新的語(yǔ)言。總之,XML使用一個(gè)簡(jiǎn)單而又靈活的標(biāo)準(zhǔn)格式,為基于Web的應(yīng)用提供了一個(gè)描述數(shù)據(jù)和交換數(shù)據(jù)的有效手段。你是否被XML語(yǔ)言的強(qiáng)大所折服呢,還在等什么,快來觀看本站的XML教程開始你的XML學(xué)習(xí)之旅吧!
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743