JavaScript 解析讀取XML文檔 實(shí)例代碼
更新時(shí)間:2009年07月07日 16:10:13 作者:
應(yīng)項(xiàng)目之需求,需用JS操作XML文檔,遂上網(wǎng)查資料,感覺(jué)這篇文章還不錯(cuò),特轉(zhuǎn)載到此地,與大家共享!
JavaScript解析讀取XML文件,主要就是加載并解析XML文件,然后就可以測(cè)試解析的XML文件的內(nèi)容,打印輸出來(lái)。
在線演示:http://demo.jb51.net/js/2012/readxml/
注:測(cè)試的時(shí)候需要在網(wǎng)站中測(cè)試,iis或apache中,注意不要本地雙擊運(yùn)行測(cè)試
index.htm
<html>
<head>
<title>腳本之家</title>
<script type="text/javascript">
function show()
{
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if(xmlhttp!=null)
{
xmlhttp.open("GET","jb51.xml",false);
xmlhttp.send(null);
var responsexml=xmlhttp.responseXML;
var menus=responsexml.getElementsByTagName("Menus")[0];
var html="";
for(var i=0;i<menus.childNodes.length;i++)
{
var menu=menus.childNodes[i];
html=html+"<h1>"+menu.getAttribute("name")+"</h1><br>";
html=html+"<h2>"+menu.childNodes[0].getAttribute("name")+"</h2><br>";
for(var j=0;j<menu.childNodes[0].childNodes.length;j++)
{
var mi=menu.childNodes[0].childNodes[j];
var url=mi.getAttribute("url");
var txt=mi.childNodes[0].nodeValue;
html=html+" <a href=\""+url+"\">"+txt+"</a><br>";
}
}
document.getElementById("tb").innerHTML=html;
}
else
{
alert("你用的什么瀏覽器?");
}
}
</script>
</head>
<body onload="show()">
<div id="tb"></div>
</body>
</html>
xml文件
<?xml version="1.0" encoding="utf-8"?>
<Menus>
<Menu id="0" name="首頁(yè)">
<MenuItemTitle sid="01" mid="0" name="常用選項(xiàng)">
<MenuItem mid="0" tid="01" url="Home.aspx">后臺(tái)首頁(yè)</MenuItem>
<MenuItem mid="0" tid="01" url="Test.aspx">測(cè)試頁(yè)</MenuItem>
</MenuItemTitle>
</Menu>
<Menu id="0" name="試試">
<MenuItemTitle sid="01" mid="0" name="常用選項(xiàng)">
<MenuItem mid="0" tid="01" url="Home.aspx">后臺(tái)首頁(yè)</MenuItem>
<MenuItem mid="0" tid="01" url="Test.aspx">測(cè)試頁(yè)</MenuItem>
</MenuItemTitle>
</Menu>
</Menus>
沒(méi)有用TABLE ,是因?yàn)轱@示倒了,所以設(shè)置了一個(gè)變量,然后顯示!值得今后借簽!
下面是另外一個(gè)例子:
編寫(xiě)了一個(gè)JavaScript的類來(lái)實(shí)現(xiàn)讀取一個(gè)XML文件中的數(shù)據(jù),實(shí)現(xiàn)代碼如下所示:
<script>
/**
* @author Shirdrn
*/
function XMLDoc(){}; // 定義一個(gè)XMLDoc類
XMLDoc.prototype.xmlFile = ""; // xmlFile為XMLDoc的一個(gè)成員,是指“.xml”文件
XMLDoc.prototype.parseXMLDoc = function(){ // 加載解析XML文件的成員方法
var docParser;
if(window.ActiveXObject) { // IE瀏覽器支持
docParser = new ActiveXObject("Microsoft.XMLDOM");
docParser.async = "false";
docParser.load(this.xmlFile);
return docParser;
}
else if(window.DOMParser) { // Mozillia瀏覽器支持
docParser = new DOMParser()
return docParser.parseFromString(this.xmlFile,"text/xml");
}
else { // 如果不是IE和Mozillia瀏覽器則無(wú)法解析,返回false。
return false;
}
}
XMLDoc.prototype.print = function(readTagName,readTagCnt) { // 打印輸出讀取的XML文件的內(nèi)容信息
var xmlDoc = this.parseXMLDoc(); // 調(diào)用成員方法parseXMLDoc()加載解析XML文件
var users = xmlDoc.getElementsByTagName(readTagName); // 獲取指定標(biāo)簽名稱的數(shù)據(jù)的一個(gè)數(shù)組users
for(var i=0 ; i<users.length ; i++) { // 雙重循環(huán)迭代輸出
document.write("<B>第" + (i+1) + "條記錄信息:</B><BR>");
for(var j=0 ; j<readTagCnt ; j++) {
var tagname = users[i].childNodes[j].tagName;
var textvalue = users[i].childNodes[j].text;
document.write(tagname + " = " + textvalue + ".<BR>");
}
}
}
var xmlDoc = new XMLDoc(); // 創(chuàng)建一個(gè)XMLDoc了IDE對(duì)象實(shí)例
xmlDoc.xmlFile = "user.xml"; // 設(shè)置對(duì)象實(shí)例的成員變量的數(shù)據(jù)
xmlDoc.print("user",6); // 打印輸出
</script>
其中,我們測(cè)試使用的XML文件user.xml的內(nèi)容如下所示:
<?xml version="1.0" encoding="utf-8" ?>
- <users>
- <user>
<id>22240319830000</id>
<name>Shirdrn</name>
<age>26</age>
<gender>男</gender>
<email>shirdrn@hotmail.com</email>
<phone>13843140000</phone>
</user>
- <user>
<id>22040319860001</id>
<name>Linda</name>
<age>23</age>
<gender>女</gender>
<email>linda@hotmail.com</email>
<phone>13843140002</phone>
</user>
</users>
運(yùn)行測(cè)試程序,解析結(jié)果輸出如下所示:
第1條記錄信息:
id = 22240319830000.
name = Shirdrn.
age = 26.
gender = 男.
email = shirdrn@hotmail.com.
phone = 13843140000.
第2條記錄信息:
id = 22040319860001.
name = Linda.
age = 23.
gender = 女.
email = linda@hotmail.com.
phone = 13843140002.
在解析XML文件的時(shí)候,要保證對(duì)不同類型的瀏覽器提供支持,這里主要對(duì)IE和Mozillia瀏覽器,否則可能無(wú)法解析。
關(guān)于其它的說(shuō)明,可以參看程序中的注釋。
在線演示:http://demo.jb51.net/js/2012/readxml/
注:測(cè)試的時(shí)候需要在網(wǎng)站中測(cè)試,iis或apache中,注意不要本地雙擊運(yùn)行測(cè)試
index.htm
復(fù)制代碼 代碼如下:
<html>
<head>
<title>腳本之家</title>
<script type="text/javascript">
function show()
{
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if(xmlhttp!=null)
{
xmlhttp.open("GET","jb51.xml",false);
xmlhttp.send(null);
var responsexml=xmlhttp.responseXML;
var menus=responsexml.getElementsByTagName("Menus")[0];
var html="";
for(var i=0;i<menus.childNodes.length;i++)
{
var menu=menus.childNodes[i];
html=html+"<h1>"+menu.getAttribute("name")+"</h1><br>";
html=html+"<h2>"+menu.childNodes[0].getAttribute("name")+"</h2><br>";
for(var j=0;j<menu.childNodes[0].childNodes.length;j++)
{
var mi=menu.childNodes[0].childNodes[j];
var url=mi.getAttribute("url");
var txt=mi.childNodes[0].nodeValue;
html=html+" <a href=\""+url+"\">"+txt+"</a><br>";
}
}
document.getElementById("tb").innerHTML=html;
}
else
{
alert("你用的什么瀏覽器?");
}
}
</script>
</head>
<body onload="show()">
<div id="tb"></div>
</body>
</html>
xml文件
復(fù)制代碼 代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<Menus>
<Menu id="0" name="首頁(yè)">
<MenuItemTitle sid="01" mid="0" name="常用選項(xiàng)">
<MenuItem mid="0" tid="01" url="Home.aspx">后臺(tái)首頁(yè)</MenuItem>
<MenuItem mid="0" tid="01" url="Test.aspx">測(cè)試頁(yè)</MenuItem>
</MenuItemTitle>
</Menu>
<Menu id="0" name="試試">
<MenuItemTitle sid="01" mid="0" name="常用選項(xiàng)">
<MenuItem mid="0" tid="01" url="Home.aspx">后臺(tái)首頁(yè)</MenuItem>
<MenuItem mid="0" tid="01" url="Test.aspx">測(cè)試頁(yè)</MenuItem>
</MenuItemTitle>
</Menu>
</Menus>
沒(méi)有用TABLE ,是因?yàn)轱@示倒了,所以設(shè)置了一個(gè)變量,然后顯示!值得今后借簽!
下面是另外一個(gè)例子:
編寫(xiě)了一個(gè)JavaScript的類來(lái)實(shí)現(xiàn)讀取一個(gè)XML文件中的數(shù)據(jù),實(shí)現(xiàn)代碼如下所示:
復(fù)制代碼 代碼如下:
<script>
/**
* @author Shirdrn
*/
function XMLDoc(){}; // 定義一個(gè)XMLDoc類
XMLDoc.prototype.xmlFile = ""; // xmlFile為XMLDoc的一個(gè)成員,是指“.xml”文件
XMLDoc.prototype.parseXMLDoc = function(){ // 加載解析XML文件的成員方法
var docParser;
if(window.ActiveXObject) { // IE瀏覽器支持
docParser = new ActiveXObject("Microsoft.XMLDOM");
docParser.async = "false";
docParser.load(this.xmlFile);
return docParser;
}
else if(window.DOMParser) { // Mozillia瀏覽器支持
docParser = new DOMParser()
return docParser.parseFromString(this.xmlFile,"text/xml");
}
else { // 如果不是IE和Mozillia瀏覽器則無(wú)法解析,返回false。
return false;
}
}
XMLDoc.prototype.print = function(readTagName,readTagCnt) { // 打印輸出讀取的XML文件的內(nèi)容信息
var xmlDoc = this.parseXMLDoc(); // 調(diào)用成員方法parseXMLDoc()加載解析XML文件
var users = xmlDoc.getElementsByTagName(readTagName); // 獲取指定標(biāo)簽名稱的數(shù)據(jù)的一個(gè)數(shù)組users
for(var i=0 ; i<users.length ; i++) { // 雙重循環(huán)迭代輸出
document.write("<B>第" + (i+1) + "條記錄信息:</B><BR>");
for(var j=0 ; j<readTagCnt ; j++) {
var tagname = users[i].childNodes[j].tagName;
var textvalue = users[i].childNodes[j].text;
document.write(tagname + " = " + textvalue + ".<BR>");
}
}
}
var xmlDoc = new XMLDoc(); // 創(chuàng)建一個(gè)XMLDoc了IDE對(duì)象實(shí)例
xmlDoc.xmlFile = "user.xml"; // 設(shè)置對(duì)象實(shí)例的成員變量的數(shù)據(jù)
xmlDoc.print("user",6); // 打印輸出
</script>
其中,我們測(cè)試使用的XML文件user.xml的內(nèi)容如下所示:
復(fù)制代碼 代碼如下:
<?xml version="1.0" encoding="utf-8" ?>
- <users>
- <user>
<id>22240319830000</id>
<name>Shirdrn</name>
<age>26</age>
<gender>男</gender>
<email>shirdrn@hotmail.com</email>
<phone>13843140000</phone>
</user>
- <user>
<id>22040319860001</id>
<name>Linda</name>
<age>23</age>
<gender>女</gender>
<email>linda@hotmail.com</email>
<phone>13843140002</phone>
</user>
</users>
運(yùn)行測(cè)試程序,解析結(jié)果輸出如下所示:
復(fù)制代碼 代碼如下:
第1條記錄信息:
id = 22240319830000.
name = Shirdrn.
age = 26.
gender = 男.
email = shirdrn@hotmail.com.
phone = 13843140000.
第2條記錄信息:
id = 22040319860001.
name = Linda.
age = 23.
gender = 女.
email = linda@hotmail.com.
phone = 13843140002.
在解析XML文件的時(shí)候,要保證對(duì)不同類型的瀏覽器提供支持,這里主要對(duì)IE和Mozillia瀏覽器,否則可能無(wú)法解析。
關(guān)于其它的說(shuō)明,可以參看程序中的注釋。
您可能感興趣的文章:
- javascript XMLHttpRequest對(duì)象全面剖析
- JS解析XML的實(shí)現(xiàn)代碼
- javascript 讀取XML數(shù)據(jù),在頁(yè)面中展現(xiàn)、編輯、保存的實(shí)現(xiàn)
- JS解析XML文件和XML字符串詳解
- js字符串轉(zhuǎn)換成xml對(duì)象并使用技巧解讀
- javascript解析xml字符串的函數(shù)
- JS操作XML實(shí)例總結(jié)(加載與解析XML文件、字符串)
- JS讀取XML文件示例代碼
- javascript 讀取xml,寫(xiě)入xml 實(shí)現(xiàn)代碼
- 使用JS讀取XML文件的方法
- JS操作XML中DTD介紹及使用方法分析
相關(guān)文章
微信小程序canvas實(shí)現(xiàn)手寫(xiě)簽名
這篇文章主要為大家詳細(xì)介紹了微信小程序canvas實(shí)現(xiàn)手寫(xiě)簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
頁(yè)面只能打開(kāi)一次Cooike如何實(shí)現(xiàn)
由于WEBIM處在獨(dú)立頁(yè)面,所以如果多次點(diǎn)擊就會(huì)出現(xiàn)多個(gè)頁(yè)面,本文將介紹詳細(xì)的解決方法,需要了解的朋友可以參考下2012-12-12
使用JavaScript將圖片合并為PDF的實(shí)現(xiàn)
在日常工作中,我們可能需要拍攝一些照片并將圖像合并到PDF文件中,這可以通過(guò)許多應(yīng)用來(lái)完成,Dynamsoft Document Viewer讓這一操作更加方便,在本文中,我們將使用Dynamsoft Document Viewer創(chuàng)建一個(gè)Web應(yīng)用,用JavaScript將圖像合并到PDF中,需要的朋友可以參考下2024-07-07
詳解SPA中前端路由基本原理與實(shí)現(xiàn)方式
這篇文章主要介紹了詳解SPA中前端路由基本原理與實(shí)現(xiàn)方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
一個(gè)html5播放視頻的video控件只支持android的默認(rèn)格式mp4和3gp
寫(xiě)了個(gè)html5播放視頻的video控件,只支持mp4和3gp(android和ios默認(rèn)支持的格式就寫(xiě)了這個(gè)) ,需要的朋友可以參考下2014-05-05
利用js編寫(xiě)網(wǎng)頁(yè)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了利用js編寫(xiě)網(wǎng)頁(yè)進(jìn)度條效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
查找頁(yè)面中所有類為test的結(jié)點(diǎn)的方法
這篇文章主要介紹了查找頁(yè)面中所有類為test結(jié)點(diǎn)的方法,需要的朋友可以參考下2014-03-03
基于javascript實(shí)現(xiàn)放大鏡特效
這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)放大鏡特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12

