[教學] XML解析
本篇是取材自#1CQqSnH0 (Ajax)
範例網頁: http://s25g5d4.sg1010.myweb.hinet.net/Untitled-1.html
XML重新格式化一遍
<?xml version="1.0" encoding="utf-8"?>
<data>
<array key="0">
<value key="no">40205</value>
<value key="name">LL</value>
</array>
<array key="1">
<value key="no">40204</value>
<value key="name">KK</value>
</array>
</data>
------------------------正文開始---------------------
XMLHttpRequest的封裝就不說了 直接看怎麼解析XML
function initPage(data) {
var a = data.getElementsByTagName("array"),
b = function (a) {
var i = 0, aLength = a.length, b = [];
for(i; i < aLength; i++) {
b.push(a[i].getElementsByTagName("value"));
}
return b;
}(a),
content = '',
i = 0;
do {
content += "<h1>第" + a[i].getAttribute('key') + "組資料</h1>";
for(var j = 0, bLength = b[i].length; j < bLength; j++) {
content += b[i][j].getAttribute("key") + " : " +
(b[i][j].textContent || b[i][j].text) + "<br />";
}
i++;
} while(i < bLength);
document.write(content);
}
其實XML DOM可以像HTML DOM一樣存取 不難阿~
b看起來好像是function 但其實是陣列 WHY?
因為我在匿名函數後面加上(a) 使得匿名函數被執行且帶入一個參數a 而傳回一個陣列
之後就是一直push東西進一個暫存陣列b
又因為這個匿名函數與原本的函數是不同的作用域了 所以變數名重複也沒關係
這就是閉包的應用 (其實我不太確定這句話啦...)
所以以本例的xml來看 a[0]是第一個<array> a[1]是第二個<array>
b[0]是第一個<array>中的每個<value>
又應用到了陣列中的陣列 所以b[0][0]代表第一個<array>中的第一個<value>
b[0][1]代表第一個<array>中的第二個<value>
b[1][0]代表第二個<array>中的第一個<value>
……
以此類推
以圖例來說就是
a┬─ 0 ─ <array key="0">
│
└─ 1 ─ <array key="1">
b┬─ 0 ┬─ 0 ─<array key="0">中的<value key="no">
│ │
│ └─ 1 ─<array key="0">中的<value key="name">
│
└─ 1 ┬─ 0 ─<array key="1">中的<value key="no">
│
└─ 1 ─<array key="1">中的<value key="name">
之後就是do{}while()迴圈
比較有問題的應該是(b[i][j].textContent || b[i][j].text)
這邊其實是考慮到相容性問題 ff支援前者 IE支援後者
順便說一下 || 這個布林符號
這是邏輯中的"或" "or"的意思 也就是兩者之一是真 則結果就是真
其檢查的順序為先檢查左邊 如果左邊為假才檢查右邊
所以左邊為真的話就是丟出左邊的值 左邊為假則檢查右邊
右邊為真就丟出右邊的值
嗯...應該是差不多了吧 有問題再發問就好 不過我能回答的有限阿~
我是真˙遜咖 來這邊賺P幣的 囧~
其實還有更好用的XPath...
--
五樓的你說 衛生棉可以吃嗎?( ‵□′)───C<─___-)|||
推
08/15 19:01,
08/15 19:01
推
08/15 19:02,
08/15 19:02
推
08/15 19:03,
08/15 19:03
推
08/15 19:04,
08/15 19:04
推
08/15 19:04,
08/15 19:04
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.101.248
重新整理code
※ 編輯: s25g5d4 來自: 218.172.101.248 (08/18 22:34)
居然忘了PO範例...
※ 編輯: s25g5d4 來自: 218.172.101.248 (08/18 22:36)
→
08/18 22:37, , 1F
08/18 22:37, 1F
改一下色碼...
※ 編輯: s25g5d4 來自: 218.172.83.123 (08/19 12:10)
→
08/27 20:27, , 2F
08/27 20:27, 2F
上色好好玩@@"
※ 編輯: s25g5d4 來自: 220.142.81.195 (09/05 00:09)
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章