• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Lua 中解析生成 Json、Xml、Html 等格式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Lua中解析生成Json、Xml、Html等文本格式

 

     Win32exts for Lua 内置了极为丰富的API,可以非常方便地解析或者生成Json、Xml、Html、ini等文本格式,并轻易地实现它们之间地相互转换。

     项目地址:https://github.com/tankaishuai/win32exts_for_Lua

 

 

 

1、解析 xml

ret_tab, max_depth = parse_xml(xml, [append_direct])

ret_tab, max_depth = parse_xml_v2(xml, [append_direct])

ret_tab, max_depth = parse_xml_v3(xml, [append_direct])

 

win32exts 提供了上述3个接口用于解析 xml 为 DOM 对象树,其内部实现分别使用 rapidxml, MyTXml, tinyxml 引擎。例如:

D:\test.xml

解析:

如图,访问每一个节点的属性用: node.attributeName

      访问每一个节点的名字用: node.__name

      访问每一个节点值用:     node.__value

      访问每一个节点的子节点用: node.__children[index]

 

例如:xml.__children[1].__children[3].setup = “SetupBranding”

如果觉得以上写法过于麻烦,希望省略 __children,则在 parse_xml 时传入第二个参数 append_direct = true:

访问每一个节点的子节点用: node[index]

例如:xml[1][3].setup = “SetupBranding”

 

也可以直接传入 xml 文本进行解析,例如:

 

parse_xml_v2, parse_xml_v3 同理。

 

 

 

2、生成 xml

 

按照以上(1)给出的 DOM 描述规则构造DOM对象,或者修改现有的 DOM对象之后,可以直接保存到 XML 中。Win32exts 提供了以下接口用户生成 xml:

is_ok/ret_str = save_xml(file_path/nil, tab, [ignore_error])

is_ok = save_xml_v3(file_path/nil, tab, [ignore_error])

第一个参数指明保存的 xml 路径文件名,如果为 nil,则直接以文本形式返回。

第二个参数为 DOM lua对象。

第三个参数为容错处理标志,指明如果格式有误,是否尽可能地忽略。注意,如果:parse_xml 调用时指明了 append_direct = true,则该参数也必须指定为 ignore_error  = true

例如, 还原上面的 xml:

save_xml_v3 同理,不再赘述。

 

 

 

3、解析,生成 html

Html 格式与 xml 比较相近,但是有下面两点区别:

1、html 没有 xml 格式要求严格,需要尽可能地容错。例如:

              <a href=“http://www.qq.com”>

             没有结尾标记 /> 或者 </a>,但也需要识别并解析。

2、html 的转义字符比 xml 要多。

 

Win32exts 提供了下述方法用于解析并生成 html:

ret_tab, max_depth = parse_html(html, [is_unescape, append_direct])

ret_tab = parse_html_v2(html, [is_unescape, filter, append_direct])

is_ok/ret_str = save_html(file_path/nil, tab, [ignore_error, is_raw_text])

其中 parse_html_v2 并不是按照 DOM结构解析,但速度较快。例如:

D:\test.html

 

以下方法抓取其内嵌的 javascript 脚本:html[1][4].__value

 

 

 

4、解析 json

Win32exts 提供了下述方法用于解析 json 格式:

ret_tab, max_depth = parse_json(json)

ret_tab, max_depth = parse_json_v2(json)

其分别使用 cJson 与 rapidjson 引擎实现。

 

例如:D:\test.json

 

Lua DOM 结构的引用方法为:node.attributeName

例如:json.allowed_origins[1]

 

比 xml 简单许多。

但需要特别注意的是:

空数组 [] 与 空对象 {} 的解析表达不同,如下:

也就是说,对于空数组 [],解析后的 Lua 对象中会额外增加一个

__is_array = true 字段用于表示这是一个空数组而非一个空对象。生成 json 文本时,如果有这种区分需求,也需同理设置。

 

 

 

5、生成 json

Win32exts 提供了如下接口用于生成 json:

is_ok/ret_str = save_json(file_path/nil, tab, [ignore_error])

is_ok/ret_str = save_json_v2(file_path/nil, tab, [ignore_error])

 

与xml 类似,第三个参数依旧是用于容错处理,对于不太符合规则的对象,建议设置为 true。

 

以下例子实现将 xml 转换为 json 格式:

 

 

 

 

6、解析、生成 ini

Win32exts 提供了如下方法用于解析、生成 ini 格式:

ret_tab = parse_profile(file_path, [filter, comment_filter])

is_ok/ret_str = save_profile(file_path/nil, tab)

 

示例如下:

       D:\test.ini

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua--io.pathinfo发布时间:2022-07-22
下一篇:
Lua 学习笔记发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap