JavaScript解析讀取XML檔案,主要就是載入並解析XML檔案,然後就可以測試解析的XML檔案的內容,列印輸出來。
線上示範:http://demo.jb51.net/js/2012/readxml/
註:測試的時候需要在網站中測試,iis或apache中,注意不要本地雙擊運行測試
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="首頁">
<MenuItemTitle sid="01" mid="0" name="常用選項">
<MenuItem mid="0" tid="01" url="Home.aspx">後台首頁</MenuItem>
<MenuItem mid="0" tid="01" url="Test.aspx">測試頁</MenuItem>
</MenuItemTitle>
</Menu>
<Menu id="0" name="試試">
<MenuItemTitle sid="01" mid="0" name="常用選項">
<MenuItem mid="0" tid="01" url="Home.aspx">後台首頁</MenuItem>
<MenuItem mid="0" tid="01" url="Test.aspx">測試頁</MenuItem>
</MenuItemTitle>
</Menu>
</Menus>
沒有用TABLE ,是因為顯示倒了,所以設定了一個變數,然後顯示!值得今後借簽!
下面是另外一個例子:
編寫了一個JavaScript的類來實現讀取一個XML檔案中的資料,實現代碼如下所示: 複製代碼 代碼如下:<script>
/**
* @author Shirdrn
*/
function XMLDoc(){}; // 定義一個XMLDoc類
XMLDoc.prototype.xmlFile = ""; // xmlFile為XMLDoc的一個成員,是指“.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瀏覽器則無法解析,返回false。
return false;
}
}
XMLDoc.prototype.print = function(readTagName,readTagCnt) { // 列印輸出讀取的XML檔案的內容資訊
var xmlDoc = this.parseXMLDoc(); // 調用成員方法parseXMLDoc()載入解析XML檔案
var users = xmlDoc.getElementsByTagName(readTagName); // 擷取指定標籤名稱的資料的一個數組users
for(var i=0 ; i<users.length ; i++) { // 雙重迴圈迭代輸出
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(); // 建立一個XMLDoc了IDE對象執行個體
xmlDoc.xmlFile = "user.xml"; // 設定對象執行個體的成員變數的資料
xmlDoc.print("user",6); // 列印輸出
</script>
其中,我們測試使用的XML檔案user.xml的內容如下所示: 複製代碼 代碼如下:<?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>
運行測試程式,解析結果輸出如下所示: 複製代碼 代碼如下:第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檔案的時候,要保證對不同類型的瀏覽器提供支援,這裡主要對IE和Mozillia瀏覽器,否則可能無法解析。
關於其它的說明,可以參看程式中的注釋。