2008年1月22日 星期二

[Javacript]讀取解xml資料

這是算用IE/FireFox裡內建讀xml資料的方法...
(網路上老是只貼一半, google大神問了好幾次XD)
跨兩個瀏覽器ok的寫法...

IE跟FireFox兩個讀xml的function跟後來取node的方式都不一樣...所以還是得分開寫

另外xml load進來的時間有點慢, 若是xml檔太大...有時後還沒load完...
items還沒建完, 就會有點怪怪的...
所以建議是...load xml最好是能寫在最前面, 讓程式有足夠的時間去load
我的偷吃步是寫死一個default的item[0]...所以才會看到從i+1開始算XD...
反正總是剛開啟用default值跑就夠了^_^!

另外同事是說...也可以用ajax去out print一個xml出來讀也是可以啦...
不過ajax要另外寫一隻...就又懶惰了一_一|||

還有用這個方法的話, 瀏覽器會暫存住資訊...所以發現要是改了xml資訊...
發現程式沒有做對應的變動...記得去清一下暫存資訊/表單資訊應該就可以了~
(差點被FireFox嚇死XD)

blog不能吃 < 緊連的字XD...又試了老半天...空一格就好了QQ

var xmlDoc;
var items = new Array();
function init() {
if(document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load("./aabbcc.xml");
xmlDoc.onload = function(){itemFireFoxSetting();}
} else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("./aabbcc.xml");
itemIESetting();
}
}

function itemFireFoxSetting() {
var ads = xmlDoc.getElementsByTagName('item');
/*
< item >
< id >A11< / id >
< /item >
*/
//alert(ads.length);

for(var i=0; i < ads.length; i++) {
var tmp = new Array();
tmp[0] = ads[i].getElementsByTagName('id')[0].firstChild.nodeValue;
items[i+1] = tmp;
//alert(tmp[0]);
}
}

function itemIESetting() {
var ads = xmlDoc.documentElement.selectNodes('item');
for(var i=0; i < ads.length; i++) {
var tmp = new Array();
tmp[0] = ads[i].getElementsByTagName('id')[0].firstChild.nodeValue;
items[i+1] = tmp;
//alert(tmp[0]);
}
}

沒有留言: