黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 淺談XML數(shù)據(jù)交互

淺談XML數(shù)據(jù)交互

更新時(shí)間:2020-11-30 17:44:45 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1982次

XML可用于交換數(shù)據(jù)?;赬ML可以在不兼容的系統(tǒng)之間交換數(shù)據(jù),計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)所存儲(chǔ)的數(shù)據(jù)有多種形式,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),最耗時(shí)間的工作就是在遍布網(wǎng)絡(luò)的系統(tǒng)之間交換數(shù)據(jù)。把數(shù)據(jù)轉(zhuǎn)換為XML格式存儲(chǔ)將大大減少交換數(shù)據(jù)時(shí)的復(fù)雜性,還可以使這些數(shù)據(jù)能被不同的程序讀取。本文我們就來(lái)談一談XML數(shù)據(jù)交互。

為了更好地理解XML數(shù)據(jù)交互,我們先來(lái)了解什么是數(shù)據(jù)交互。數(shù)據(jù)交換是指為了滿足不同信息系統(tǒng)之間數(shù)據(jù)資源的共享需要,依據(jù)一定的原則,采取相應(yīng)的技術(shù),實(shí)現(xiàn)不同信息系統(tǒng)之間數(shù)據(jù)資源共享的過(guò)程。

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)目使用比較多

我們先以一張圖來(lái)初步了解XML的數(shù)據(jù)傳輸:

如圖所示:

image.png 

3、XML數(shù)據(jù)傳輸過(guò)程中的組件功能

服務(wù)器端:

服務(wù)器端組件主要完成以下三個(gè)功能:

第一:網(wǎng)絡(luò)監(jiān)聽(tīng)功能

當(dāng)接收到客戶端傳來(lái)的請(qǐng)求時(shí),會(huì)觸發(fā)一個(gè)監(jiān)聽(tīng)事件,在這一事件的處理代碼中得到客戶端的查詢請(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ù)器端建立連接

通過(guò)服務(wù)器端的監(jiān)聽(tīng)程序建立連接

第二:發(fā)送查詢請(qǐng)求

用戶在客戶端發(fā)出查詢請(qǐng)求,通過(guò)建立的連接把請(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)大所折服呢,還在等什么,快來(lái)觀看本站的XML教程開(kāi)始你的XML學(xué)習(xí)之旅吧!

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 狠狠干狠狠干 | 成人午夜性a一级毛片美女 成人午夜小视频 | 亚欧精品一区二区三区四区 | 亚洲欧美中文字幕 | 三级黄色片免费看 | 天天噜噜揉揉狠狠夜夜 | 国产一二三四区在线观看 | 国产 欧美 日产久久 | 欧美特级特黄a大片免费 | 天天槽任我槽免费 | 日本插插视频 | 日韩一区二区三区免费体验 | 四虎永久在线精品波多野结衣 | 劲爆欧美精品13页 | 在线观看国产一区二区三区99 | 一级全免费视频播放 | 一区二区三区精品视频 | 视频一区中文字幕 | 国产黄色激情视频 | 色好吊 | 亚洲va韩国va欧美va天堂 | 91在线老王精品免费播放 | 亚欧成人乱码一区二区 | 免费成年人视频网站 | 日韩精品免费观看 | 天天躁夜夜躁狠狠躁躁 | 天天操视频 夜夜 | 欧美国产综合在线 | 巨胸喷奶水www久久久 | 久久精品国产大片免费观看 | 韩国伦理剧在线看 | 韩国 日本 在线观看 | 成年看片免费高清观看 | 二区三区在线 | 日韩欧美大陆 | 欧美日韩国产高清精卡 | 成人高清毛片a | 亚洲一区天堂 | 国产1卡二卡3卡四卡免费 | 免费一级欧美片在线观免看 | 日本中文字幕在线观看视频 |