色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JS跨瀏覽器解析XML應(yīng)用過程詳解

瀏覽:145日期:2024-04-15 16:34:02

首先介紹簡(jiǎn)單的理論:

對(duì)于XML,我們可以理解它是一種樹結(jié)構(gòu),它包含根,元素,屬性,文本等內(nèi)容。不同瀏覽器都有自己的解析器,把XML讀入內(nèi)存,并把它轉(zhuǎn)換為可被 JavaScript 訪問的 XML DOM 對(duì)象。

微軟的 XML 解析器與其他瀏覽器中的解析器是有差異的。微軟的解析器支持對(duì) XML 文件和 XML 字符串(文本)的加載,而其他瀏覽器使用單獨(dú)的解析器。不過,所有的解析器都含有遍歷 XML 樹、訪問、插入及刪除節(jié)點(diǎn)的函數(shù)。

如果你使用的是一個(gè)本地文件或者網(wǎng)絡(luò)文件且該文件在是在本服務(wù)器,那么對(duì)于IE和其他瀏覽器來(lái)說(shuō)都可以通過load(uRl),loadXML(strXML)來(lái)創(chuàng)建Xdom對(duì)象。但是對(duì)于文本,除IE外需要一個(gè)單獨(dú)的解析器來(lái)處理。

以下函數(shù)用于根據(jù)不同的瀏覽器來(lái)創(chuàng)建Xdom對(duì)象:

function loadXMLDoc() { var xmlDoc; // code for IE if (window.ActiveXObject){ xmlDoc=new ActiveXObject('Microsoft.XMLDOM');//創(chuàng)建空的微軟 XML 文檔對(duì)象 //xmlDoc.load(uRl); //loadXML() 方法用于加載字符串(文本),而 load() 用于加載文件 xmlDoc.loadXML(xmlstr); } // code for Mozilla, Firefox, Opera, etc. else if(document.implementation&&document.implementation.createDocument){ xmlDoc=document.implementation.createDocument('','',null); //xmlDoc.load(uRl); //Internet Explorer 使用 loadXML() 方法來(lái)解析 XML 字符串,而其他瀏覽器使用 DOMParser 對(duì)象 parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,'text/xml'); }else{ alert(’Your browser cannot handle this script’); } //關(guān)閉異步加載,這樣可確保在文檔完整加載之前,解析器不會(huì)繼續(xù)執(zhí)行腳本 xmlDoc.async=false; createTable(xmlDoc); }

方法內(nèi)有具體的解析,我不再??攏?雜誚馕齙哪諶藎?治?址??臀謀玖街幀?/p>

首先定義一個(gè)字符串:

var xmlstr='<?xml version='1.0' encoding='UTF-8'?><goodss><goods id='1'><name>數(shù)碼相機(jī)</name><price>3206(元)</price></goods><goods id='2'><name>聯(lián)想筆記本電腦</name><price>3206(元)</price></goods></goodss>';

然后定義一個(gè)goods.xml文件:

文件內(nèi)容為:

<?xml version='1.0' encoding='UTF-8'?> <goodss> <goods id='1'> <name>數(shù)碼相機(jī)</name> <price>3206(元)</price> </goods> <goods id='2'> <name>聯(lián)想筆記本電腦</name> <price>3206(元)</price> </goods> </goodss>

通過取消和注釋方式來(lái)選擇是文本還是字符串。

這個(gè)方法可以是通用的,下面再來(lái)解析這個(gè)Xdom對(duì)象:

function createTable(xmldoc){ var goodss=xmldoc.getElementsByTagName('goods'); for(var i=0;i<goodss.length;i++){ var g=goodss[i]; if (g.nodeType==1){ var name=g.getElementsByTagName('name')[0].childNodes[0].nodeValue; var price=g.getElementsByTagName('price')[0].childNodes[0].nodeValue; var id=g.getAttribute('id'); document.write(id + '-->' + name + '-->' + price); document.write('<br />'); } } }

對(duì)于使用到的函數(shù)和屬性我們來(lái)解析一下:

/* 一些典型的 DOM 屬性 x.nodeName - x 的名稱 x.nodeValue - x 的值 x.parentNode - x 的父節(jié)點(diǎn) x.childNodes - x 的子節(jié)點(diǎn) x.attributes - x 的屬性節(jié)點(diǎn) x.firstChild - x 的第一個(gè)子節(jié)點(diǎn),等同于childNodes[0] x.lastChild - x 的最后一個(gè)子節(jié)點(diǎn) x.data - x 的內(nèi)容,等同nodeValue x.length - x 的長(zhǎng)度 x.nodeType - x 的類型:1,元素,2,屬性,3,文本,4,注釋,5,文檔 在上面的列表中,x 是一個(gè)節(jié)點(diǎn)對(duì)象 XML DOM 方法 x.getElementsByTagName(name) - 獲取帶有指定標(biāo)簽名稱的所有元素,返回的是數(shù)組 x.getAttribute(name) - 返回屬性的值 */ /*出于安全方面的原因,現(xiàn)代的瀏覽器不允許跨域的訪問。 這意味著,網(wǎng)頁(yè)以及它試圖加載的 XML 文件,都必須位于相同的服務(wù)器上。 否則,xmlDoc.load() 將產(chǎn)生錯(cuò)誤 'Access is denied'。 */

早頁(yè)面增加一個(gè)按鈕來(lái)調(diào)用函數(shù):

<input type='button' name='bxml' value='Read' onclick='loadXMLDoc()' />

頁(yè)面將會(huì)輸出XMl內(nèi)節(jié)點(diǎn)的屬性和子節(jié)點(diǎn)的內(nèi)容。對(duì)于一般應(yīng)用來(lái)說(shuō),我覺得上面內(nèi)容已經(jīng)足夠了。我會(huì)在之后補(bǔ)充一些其他操作。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美性生交大片免费看 | 国产九九精品 | 一区二区不卡在线 | 欧美特黄三级成人 | 午夜黄色福利视频 | www.黄色免费 | fc2ppv在线观看 | 久久久久国产一级毛片高清片 | 国产精品视频视频久久 | 成人国产三级精品 | 51国产偷自视频区视频手机播器 | 亚洲成a| 国产一级一级一级成人毛片 | 久草视频在线播放 | 亚洲精品理论 | 夜色毛片永久免费 | 久久99国产精一区二区三区 | 国产日韩欧美精品一区二区三区 | 久久久www免费人成看片 | 精品久久久日韩精品成人 | 亚洲一级黄色毛片 | 国产色在线播放 | 精品韩国主播福利视频在线观看一 | 成人免费看黄 | 高清一级淫片a级中文字幕 高清一区二区 | 久久精品99毛片免费 | 亚洲成av人片在线观看 | 午夜桃色剧场 | 免费一级欧美性大片 | 欧美日韩一区二区在线观看 | 国产精品合集一区二区 | 在线精品视频免费观看 | 成人国产在线视频 | 天堂最新版 | 50岁老女人毛片一级亚洲 | 久久久久国产成人精品亚洲午夜 | 久久香蕉国产线看观看精品yw | 国产成人精品视频免费 | 97精品国产福利一区二区三区 | 亚洲一级在线 | 国外成人在线视频 |