Unity 之 Lua中读取处理XML文件

网友投稿 842 2022-05-30

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上的文档说明:

eight twelve

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

Unity 之 Lua中读取处理XML文件

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小时内删除侵权内容。

上一篇:Python常用GUI框架原理解析汇总
下一篇:公元2021年,关于前端工程化你应该知道些什么
相关文章