Unity 之 Lua中读取处理XML文件

网友投稿 816 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

Unity 之 Lua中读取处理XML文件

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

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