luaXml库的使用方法

提供一个xml文件

<?xml version="1.0" encoding="GB2312"?>
<!-- edited with XMLSpy v2008 sp1 (http://www.altova.com) by shaoyz -->
<!--[0]-->
<computer>
<!--[1];取value的值为file[1]["value"];取name的值为file[1]["thinkpad"]-->
<id value="1" name="thinkpad">
<!--取size的值为file[1][1][1]-->
<size>17</size>
<!--去height的值为file[1][2][1]-->
<height>250</height>
<!--取该工厂的name的值为file[1][3]["name"]-->
<factory name="xxxx"/>
</id>
<!--[2];取该value的值为file[2]["value"];取name的值为file[2]["name"]-->
<id value="2" name="thinkpad">
<size>12</size>
<height>150</height>
</id>
<id value="3" name="thinkpad">
<size>14</size>
<height>200</height>
</id>
</computer>

problem:

1.如何取到父节点的名称?例如,在上述的xml文件中,怎么判断父节点是否为“computer”?

--filePath为上述xml文件的路径
local xfile = xml.load(filePath)
--xfile[0]对应的就是“computer”。
2. 如何取到子节点以及子节点的属性值?

以上述的xml文件为例,取第一个子节点的下的数据

xfile[1]对应的是value = 1的id的所有内容,因此

xfile[1][0]=="id"

xfile[1]["value"]==1

xfile[1]["name"]==thinkpad

xfile[1][1][0]=="size"

xfile[1][1][1]==14

xfile[1][2][0]=="height"

xfile[1][2][1]=="200"

对于第二个id节点的值,只需要将xfile[1]换成xfile[2]即可。

提供解析该xml的lua脚本

--------------------------------------------------------------------
--记录下luaXML的使用方法
--------------------------------------------------------------------
--定义lua脚本寻找的路径,因为我的windows下的lua安装路径是:d:\\Program Files\\Lua\\5.1\\lua\\?.lua,另外的processTest脚本的路径为e:\\LUA_PROJECT\\tr\\src\\?.lua。

package.path='d:\\Program Files\\Lua\\5.1\\lua\\?.lua;e:\\LUA_PROJECT\\tr\\src\\?.lua;'
--加载标准库
require"std"
require"table"
--加载luaXML库
require"LuaXml"

local g_alarmInfo = {}
-------------------------------------------------------------------
-- 读取xml文件
-- & argument1 文件路径
-------------------------------------------------------------------
local function readData(filePath)
--调用xml.load加载数据
local xfile = xml.load(filePath)
return xfile
end

------------------------------------------------------------
--分割字符串
------------------------------------------------------------
local function StringSplit(str,split_char)
        -------------------------------------------------------
        -- 参数:待分割的字符串,分割字符
        -- 返回:子串表.(含有空串)
        local sub_str_tab = {};
        while (true) do
            local pos = string.find(str, split_char);
            if (not pos) then
                sub_str_tab[#sub_str_tab + 1] = str;
                break;
            end
            local sub_str = string.sub(str, 1, pos - 1);
            sub_str_tab[#sub_str_tab + 1] = sub_str;
            str = string.sub(str, pos + 1, #str);
        end

        return sub_str_tab;
    end

-----------------------------------------------------------
--解析xml文件
----------------------------------------------------------- 
local function readTestFile(filepath)
	local xfile = readData(filepath)
	print(xfile[0])
	--取size的值,但是只能取到第一个节点的值
	local item = xfile:find("size")
	print(item[1])
	local i = 1
	local valid_count = 1
	if xfile ~= nil and xfile[i] ~= nil then
		repeat
			print(xfile[i][0])--xfile[i][0] 应该对应ID
			print(string.format("value:%s-name:%s.",xfile[i]["value"],xfile[i]["name"]))
                        --获取无属性的节点的值
			print(string.format("size:%d.height:%d.",xfile[i][1][1],xfile[i][2][1]))
			--取带属性的节点下该属性的值	
			if xfile[i][3] ~= nil and xfile[i][3][0] == "factory" then
				print(string.format("factory name:%s.",xfile[i][3]["name"]))
			end
			i = i+1
		until xfile[i] == nil
	end
end
local filePath="test_xml.xml"
readTestFile(filePath)
输出结果:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 Android 平台上,可以使用 Lua 脚本实现屏幕截图,但需要依赖第三方,如 luajava 或 slua。以下是一个示例代码,用于在 Android 平台上使用 Lua 实现屏幕截图: 1. 首先,在 Android 应用的 Java 代码中,创建一个 `takeScreenshot` 方法,用于实现屏幕截图: ```java public Bitmap takeScreenshot() { View rootView = getWindow().getDecorView().getRootView(); rootView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(rootView.getDrawingCache()); rootView.setDrawingCacheEnabled(false); return bitmap; } ``` 2. 在 Lua 脚本中,调用 `luajava.bindClass` 函数将 Java 类绑定到 Lua 中: ```lua -- 加载 luajava local luajava = require("luajava") -- 绑定 MainActivity 类 local MainActivity = luajava.bindClass("com.package.name.MainActivity") ``` 3. 调用 `MainActivity:takeScreenshot()` 方法获取屏幕截图: ```lua -- 调用 takeScreenshot 方法获取屏幕截图 local bitmap = MainActivity:takeScreenshot() ``` 以上代码中,通过 `luajava.bindClass` 函数将 Java 的 `MainActivity` 类绑定到 Lua 中。在 Lua 中,可以通过 `MainActivity:takeScreenshot()` 调用 `takeScreenshot` 方法获取屏幕截图。 需要注意的是,在 Android 应用中集成 Lua,需要使用第三方,如 luajava 或 slua。可以通过 Gradle 依赖管理工具,在 Android 应用中添加 luajava 或 slua 的依赖。同时,需要在 Android 应用的 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> ``` 这是因为 Android 平台上,需要获取读取帧缓冲区的权限才能够实现屏幕截图。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值