热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Lua中解析生成Json、Xml、Html等文本格式    Win32extsforLua内置了极为丰富的API,可以非常方便地解析或者生成Json、Xml、Html、ini等文本

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

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

解析:

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

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

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

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

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

 

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

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

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

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

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

 

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

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

 

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:

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

save_xml_v3 同理,不再赘述。

 

 

 

3、解析,生成 html

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

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

              “http://www.qq.com”>

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

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

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

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

 

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

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

 

 

 

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 中解析生成 Json、Xml、Html 等格式

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

 

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

例如:json.allowed_origins[1]

 

比 xml 简单许多。

但需要特别注意的是:

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

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

也就是说,对于空数组 [],解析后的 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。

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

 

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

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

 

 

 

 

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

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

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

 

 

 


推荐阅读
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
author-avatar
木马
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有