ASP 與 XML part 2 - 聖殿英雄傳說 MUD

Tracy avatar
By Tracy
at 2012-03-17T17:57

Table of Contents

最近在公司以單純的 ASP(非 ASP.NET) 寫了兩支程式,這裡
做個分享。以底下的 xml 為例

<sanc>
<playerdata>
<player>
<id>laechan</id>
<level>120</level>
<race>human</race>
</player>
<player>
<id>norr</id>
<level>120</level>
<race>devil</race>
</player>
</playerdata>
</sanc>

我使用 response.cookies 的方式(簡單的說就是土法煉鋼)
來儲存上面的資訊,做法如下...

<%
' 先 create 一個 xml 用的物件
Set Https = Server.CreateObject("MSXML2.XMLHTTP")

' 把這個物件設為指向打開下列網址的 xml 資料傳送用物件
' 然後把資料 send 給它(new_str 就是我編好的 xml 東西)
Https.open "POST","http://網址/api",false
Https.send new_str

' 若傳送有成功(state=4)就執行底下
if Https.readystate=4 then

' create 出一個存放 xml 資料的物件
set xml = Server.CreateObject("MSXML2.DOMDocument")
xml.Async = false

' 讓這個物件去做 loadXML 的動作, 其目標是從上述網址
' response 回來的東西, 假設就是我上面打的那一串 xml
xml.loadXML Https.ResponseText

' 下面這個動作, 可以把「每一個」 <player> ... </player>
' 裡面的東西撈出來存放到 players 裡頭,類似底下這樣
' players = ({ ({"laechan","120","human"}), ({"norr","120","devil"}),.. })
set players = xml.getElementsByTagName("player")

' 這個類似 sizeof(players) < 1 的判斷式
if players.length < 1 then
response.write "沒有撈到任何資料喔.<p>"
' 底下類似程式執行到這裡就 end 掉(結束)
response.end
end if

' 把 k 存成長度的整數, 我實測過若不經過這個轉換
' players.length 無法被判斷為整數, 很怪
k = CInt(players.length)

dim keyname(100)

for i = 0 to k-1

' playerxml = 每一筆 <player> ... </player>
set playerxml = player.item(i)

' playerxml 的第 0 筆資料就是 <id> 資料
' 令 playerid = 該值而且強制其變成字串
' .childNodes(n) 就是取出第 n 筆子節點, .text 代表取出節點的值
playerid = CStr(playerxml.childNodes(0).text)

' 並把每一個 playerid 另外存起來
keyname(i) = playerid

' 接著, 就去撈每一個 <player> ... </player> 底下的子節點
' 也就是 <id> , <level>, <race> 那些
for each nodes in playerxml.childNodes

' 取得子節點名字, 就是 "id", "level", "race" 等
' 上面的 for each nodes 的目的就是為了取得 nodes 這個東西
tmp=CStr(nodes.NodeName)

' 把資料用類似 mapping 的方式存起來
' cookies("laechan")("level") = "120" 這樣
response.cookies(playerid)(tmp) = playerxml.childNodes(j).text
next

next
end if


到這裡就讀完了,接著就是驗證結果

strs = "<table border=1><tr><th>玩家ID</th><th>等級</th><th>種族</th></tr>"

for i = 0 to k-1

playerid = keyname(i)

' 底下就類似 strs = strs + xxx
strs = strs & "<tr><th>" & request(playerid)("level") & "</th>"
strs = strs & "<tr><th>" & request(playerid)("race") & "</th></tr>"

next

response.write strs & "</table>"

%>


其網頁執行結果就類似底下

┌────┬──┬───┐
│ 玩家ID │等級│ 種族 │
├────┼──┼───┤
│laechan │120 │human │
├────┼──┼───┤
│norr │120 │devil │
└────┴──┴───┘


跟自己熟悉的語言對照一下就能理解上面的寫法,這是一種土法
煉鋼的方式,為的就是以最快的速度開發出我想要的東西。

LAechan

--
Tags: 線上

All Comments

模組測試

Edwina avatar
By Edwina
at 2012-03-17T17:56
如提 忙碌玩之後逛個多玩論壇 意外找到一包弓箭手的配音包 以往都是法師居多 裝了之後感覺還不賴 可惜似乎沒有全技能語音替換 半日半韓的韓日混血囉 -- http://zh-tw.twitch.tv/emcc166 很黑的實況台 從來都沒有固定時間 還有很可怕的BGM 來嗎來 ...

jwalker

William avatar
By William
at 2012-03-17T17:54
簡而言之就是自介文。希望能依照格式填寫,不過並不強迫,另外可以自由增刪 選項,唯有PTT跟遊戲ID為必填。除非有更動資料,不然一人一篇為限,違者警告一次。 =========================看完後請使用 ctrl + y 刪除========================= ◤◢◤ 基本 ...

封測信發送了!

Annie avatar
By Annie
at 2012-03-17T17:36
http://m.gamer.com.tw/forum/C.php?bsn=16901andamp;snA=832andamp;bpage=1 快收信吧各位! - ...

蕾娜是否不理空降角色?

Valerie avatar
By Valerie
at 2012-03-17T17:33
我想要開啟蕾娜好感 但是從將軍那邊的任務一直接到英雄哥淑結束以後就停了 找不到去孤島找鐵匠的任務(將軍那邊剩下的都是Lv32以上和巢穴) 這樣領地的告白時間啦~ 請問有人能給個提示嘛? - ...

活動-求愛大作戰!少女愛菈告白四部曲

Anthony avatar
By Anthony
at 2012-03-17T17:32
http://cabala.chinesegamer.net/event/120314/ 等級限制:30以上 活動時間:2012/3/15(四)維護後到2012/4/19(四)維護前 少女愛菈的煩惱-告白四部曲 1.道具少年湯瑪士的請求 總是活潑開朗的道具少女愛菈,最近舉止都不對勁,美加路中央廣場的道具 ...