Unity 之 Lua中讀取處理XML文件
Unity 之 Lua中處理XML文件
一.下載xmlSimple.lua并導入工程
二.解析XML
三.實際使用
一.下載xmlSimple.lua并導入工程
首先需要下載Lua-Simple-XML:GitHub地址:
https://github.com/Cluain/Lua-Simple-XML-Parser
1.將xmlSimple.lua文件復制到項目中。
2.創建局部變量local xml = require(“xmlSimple.lua”).newParser()
3.使用xml:ParseXmlText(xmlString)或xml:loadFile(xmlFilename, base)
按照上面的步驟使用,我將xmlSimple.lua腳本導入到:LuaFramework --> Lua – > Common 的文件夾下面,所有我創建局部變量是下圖這樣寫的:
讀取代碼:
xml:ParseXmlText(xmlString) 這個讀取方式是傳遞一個Xml的字符串,就不多說了,官方的Demo就是這么寫的,有興趣可以去看下.
xml:loadFile(xmlFilename, base) 這個讀取文件的形式的不太好用,可能是我沒用明白吧,有知道的大佬,希望留言解惑.
二.解析XML
是Lua-Simple-XML在GitHub上的文檔說明:
1
2
3
4
5
可以通過兩種方式訪問值:
使用簡單的方法:
xml.test["@one"] == "two" xml.test.nine["@ten"] == "eleven" xml.test.nine:value() == "twelve" xml.test.three[1]["@four"][1] == "five" xml.test.three[1]["@four"][2] == "six" xml.test.three[2]:value() == "eight"
1
2
3
4
5
6
或者,如果您的XML稍微復雜一點,您可以這樣做:
xml:children()[1]:name() == "test" xml:children()[1]:children()[2]:value() == "eight" xml:properties()[1] == {name = "one", value = "two"}
1
2
3
三.實際使用
function LoadConfigFile() -- 讀取本地文件 -- local xmlDoc = xml:loadFile("E:\project\client_3_0\Assets\Resources\GameRule\Test.xml") -- -- 讀取Resources下的文件 -- 注意要在 CustomSettings.cs腳本中添加 _GT(typeof(TextAsset)), local textAsset = resMgr:LoadAsset("GameRule/Test"); if textAsset == nil then logError("未讀取到的文件:",GAME_KIND_WORD[Cur_GameKind],gameKind); return; end //讀取XML文件 local xmlDoc = xml:ParseXmlText(textAsset.text); print(type(xmlDoc)) --[[ 看看讀取到的表中的屬性有什么 for k,v in pairs(xmlDoc) do print(k,v) end RuleRoot table: 0x36d26498 addProperty function: 0x36d288b8 children function: 0x36d287c8 addChild function: 0x36d28828 ___value properties function: 0x36d28858 setValue function: 0x36d24760 setName function: 0x36d28798 numProperties function: 0x36d28888 value function: 0x36d28608 __props table: 0x36d285c0 numChildren function: 0x36d287f8 name function: 0x36d286a0 ___children table: 0x36d28578 ]] -- 一級節點的子節點數 print(xmlDoc:numChildren()) -- 第一個二級節點的名字 print(xmlDoc:children()[1]:name()) -- 第一個二級的節點的子節點數 print(xmlDoc:children()[1]:numChildren()) -- 一級節點 local rootRule = xmlDoc:children()[1]; -- 二級節點 local root = rootRule:children()[1]; -- 遍歷子節點 for i = 1, root:numChildren() do local rowNode = root:children()[i]; -- C#中獲取名字這樣寫 rowNode.Name if rowNode:name() == "row" then print("子節點的名字是:Row 處理邏輯 todo..."); end -- 獲取屬性 C#: rowNode.Attributes["ruleName"] if rowNode["@ruleName"] ~= nil then print("子節點存在ruleName屬性 todo..."); end -- 獲取屬性的值 C#:rowNode.Attributes["txt"].Value; local data = rowNode["@txt"]; --獲取指定的子節點 C#:root.SelectSingleNode("groups"); local groupsNode = root.groups; end end
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
遇到的一個問題: 在使用過程中,我的XML如下,
1
2
我這樣獲取這個one的屬性是取不到的,
local data = rowNode["@one"]
1
經驗證,是因為上面one后面多個
空格
造成的,具體原因我還不清楚,希望有知道的大佬告知,希望你不要犯這樣的錯誤哦!
Lua unity XML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。