热门标签 | 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 等格式

 

 

 


推荐阅读
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
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社区 版权所有