天堂私服 | Java DOM 基礎
章節用意
核心中有使用Java DOM
解析器對XML
進行解組並使用,在進行更進一步的分析時,需要先了解Java DOM
的解析器基礎使用。
此章節將會介紹如何使用Java DOM
對XML
進行解組(unmarshal
)。
核心版本
- L1J-3.80c
分析
- 於核心中可以找到
/data/xml/GmCommands/GMCommands.xml
,其用途為設定Boss
的循環重生設定。 - 在進一步搜尋可以找到
src/l1j/server/server/GMCommandsConfig.java
是解組該xml
的主要程式。 - 可見下圖,左方
import
所使用的即是javax.xml
與org.w3c.dom
,右方為使用的xml
。
Java DOM 解析器 - 概述
文件物件模型是全球資訊網聯盟(W3C)的官方推薦。它定義了一個介面,使程式能夠存取和更新樣式,結構和XML
文件的內容。支援DOM
實現該介面的XML
解析器。
- 何時使用?
- 在以下幾種情況時,應該使用DOM解析器:
- 需要知道很多關於文件的結構。
- 需要將文件的部分周圍(例如,可能需要某些元素進行排序)。
- 需要使用的檔案中的資訊超過一次
- 在以下幾種情況時,應該使用DOM解析器:
- 會得到什麼?
- 當使用
DOM
解析器解析一個XML
文件,會得到一個樹形結構,其中包含的所有文件的元素。DOM
提供了多種可用於檢查文件的內容和結構的函式。
- 當使用
- 優勢
DOM
是用於處理文件結構的通用介面。它的一個設計目標是Java
程式碼編寫一個DOM
相容的解析器,執行在任何其他的DOM
相容的解析器不會有變化。
DOM
介面DOM
定義了幾個Java
介面。這裡是最常見的介面:- 節點 - DOM的基本資料型別。
- 元素 - 要處理的物件絕大多數是元素。
Attr
- 代表元素的屬性。- 文字 - 元素或
Attr
的實際內容。 - 文件 - 代表整個XML文件。文件物件是通常被稱為
DOM
樹。
- 常見的
DOM
方法- 當正在使用DOM,有經常用到的幾種方法:
Document.getDocumentElement()
- 返回文件的根元素。Node.getFirstChild()
- 返回給定節點的第一個子節點。Node.getLastChild()
- 返回給定節點的最後一個子節點。Node.getNextSibling()
- 這些方法返回一個特定節點的下一個兄弟節點。Node.getPreviousSibling()
- 這些方法返回一個特定節點的前一個兄弟節點。Node.getAttribute(attrName)
- 對於給定的節點,則返回所請求的名字的屬性。
- 當正在使用DOM,有經常用到的幾種方法:
Java DOM 範例(解組)
此處使用核心內的GMCommands.xml
來當作範例。
- 先觀看
XML
的結構。GMCommands.xml
註:範例內容有部分刪減,並非原本的完整內容。
- 所以根據
XML
的元素與屬性,分別定義出兩個Object
-L1ItemSetItem
Room
- 接著使用
DOM
來將XML
解組至Java
對象內,並將內容輸出。Main
Console
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Name:ot, LocX:32715, LocY:32448, MapId:4
Name:it, LocX:32771, LocY:32822, MapId:75
Name:dicarding, LocX:32766, LocY:32797, MapId:77
Name:gludio, LocX:32612, LocY:32734, MapId:4
Name:hv, LocX:32671, LocY:32836, MapId:69
Name:mt, LocX:33054, LocY:32323, MapId:4
Name:kent, LocX:33050, LocY:32780, MapId:4
Name:werldern, LocX:33705, LocY:32504, MapId:4
Name:aden, LocX:33966, LocY:33253, MapId:4
Name:sc, LocX:32854, LocY:32907, MapId:304
Name:skt, LocX:33080, LocY:33392, MapId:4
Name:ti, LocX:32580, LocY:32931, MapId:0
Name:si, LocX:32782, LocY:32756, MapId:68
Name:gmshop, LocX:33079, LocY:33402, MapId:4
Name:ww, LocX:32621, LocY:33169, MapId:4
Name:gunter, LocX:32669, LocY:32790, MapId:3
Name:oren, LocX:34061, LocY:32276, MapId:4
Name:bluedika, LocX:32739, LocY:32801, MapId:305
Name:heine, LocX:33612, LocY:33268, MapId:4
Name:giran, LocX:33442, LocY:32797, MapId:4
Name:gypsy, LocX:33978, LocY:32927, MapId:4
Name:dkset
Id:58, Amount:1, Enchant:10
Id:20010, Amount:1, Enchant:10
Id:20100, Amount:1, Enchant:10
Id:20166, Amount:1, Enchant:10
Id:20198, Amount:1, Enchant:10
結語
為什麼用XML
?好處是什麼?可以參考XML 基礎教學。
原創文章真的不易,希望多多支持,感謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章節目錄。
免責聲明
- 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
- 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有。
- 本部落格文章為研究SQL資料庫與修改JAVA語法使用,並非商業用途,亦無做營運事實等任何一切商業行為。
- 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容!