Nginx+Lua环境中利用LuaXml解析Xml

时间:2021-10-02 20:18:47

搭建Nginx+Lua环境参见nginx+lua+redis构建高并发应用(ubuntu) 和nginx+lua+redis构建高并发应用(centos/rehat)


在LuaXml官网(需要*,运气好可以不用Nginx+Lua环境中利用LuaXml解析Xml)有两个版本:LuaXML_130610.zipLuaXML_101012.zip,分别对应lua5.2和lua5.1版本。根据lua版本自行下载。下载后如果可以直接链接就用,如果链接出错则需要自行编译,编译步骤如下。

1、修改Makefile

Makefile中的头文件目录和依赖库目录都不对,需要修改成自己lua库对应的位置。修改完之后执行make。这时目录下会生成出LuaXML_lib.so。这里最好先将原先存在的LuaXML_lib.so删除。


2、配置目录

编译完成后,将LuaXML_lib.so和LuaXml.lua放置于/usr/local/lib/lua/5.1/目录下。因为默认依赖库目录在这里,当然你也可以指定一个目录,同时将目录设置进环境变量。比如mkdir /home/usr/soft。编辑 vim /etc/profile文件,在文件尾部添加 export PATH=/home/usr/soft:$PATH。保存退出后执行 source /etc/profile使之生效。


到这里我们在lua文件或者nginx.conf的lua片段中就可以使用LuaXml来解析xml格式的文件、字符串了。例子如下。

1、链接LuaXml库

 

init_by_lua 'require("LuaXml")';


链接完后,由于LuaXml返回的是全局对象xml,所以后续就直接可以使用xml.来调用函数使用。init_by_lua 位于http片段中。


2、构造xml字符串

 

rez = xml.new("response")
rez:append("server_ip")[1] = "127.0.0.1"
rez:append("server_port")[1] = "12345"
rez = xml.str(rez)

 

返回的rez为字符串类型。


3、解析xml字符串

 

local xml_info = xml.eval(resp.body)
local item = xml_info:find("is_alive")
local value = item[1] --这里去除is_alive的值

 

取出的value根据需要转换。