关于XML的知识在这里就不多做介绍,如果你还不了解XML,可以到这里看http://en.wikipedia.org/wiki/XML。
这篇文章主要是告诉你如何在corona中使用并操作XML文件。
XML.lua
你可以自己写一个模块或者函数来读写XML文件,但是网上有很多免费的lua脚步实现XML文件的读写,干嘛什么事情都要自己动手做呢:)
为了加快速度,我把这些脚本做了一些针对corona的修改。因此,在开始之前,请从GitHub下载xml.lua的文件。
下载地址:https://github.com/jonbeebe/Corona-XML-Module
准备工作,创建测试用的xml文件
<?xml version="1.0"?><inbox language="EN" color="orange"><message><to>Jane Doe</to><from>John Dane</from><subject>Will you marry me?</subject><body>If not that's okay too.</body></message><message><to>Bob Willy</to><from>Willy Bob</from ><subject>Heard my new record?</subject><body>It's rad dude.</body></message><message><to>Panda</to><from>Duck</from><subject>I'm ready to tell you.</subject><body>There is no secret ingredent.</body></message></inbox>
读XML文件代码--初始化xml解析器
local xml = require( "xml" ).newParser()--加载xml文件,inbox是一个table,数据结构如下图所示
local inbox = xml:loadFile( “sample.xml” )
local message = {} -- for each "child" in the inbox table...for i=1,#inbox.child do-- store the address in the message tablemessage[i] = inbox.child[i]end
-- for each message, print data to the terminalfor i=1,#message do -- extract data from table and store in local variables-- for easier readability/access:local to = message[i].child[1].valuelocal from = message[i].child[2].valuelocal subject = message[i].child[3].valuelocal body = message[i].child[4].value -- print message data to terminalprint( "\n--------------------------------------------------" )print( "To: ", to )print( "From: ", from )print( "Subject:", subject )print( "Body: ", body )end
上面的代码会输出如下结果:
-------------------------------------------------- To: Jane Doe From: John Dane Subject: Will you marry me? Body: If not that's okay too. -------------------------------------------------- To: Bob Willy From: Willy Bob Subject: Heard my new record? Body: It's rad dude. -------------------------------------------------- To: Panda From: Duck Subject: I'm ready to tell you. Body: There is no secret ingredient.
读取属性
<inbox language=”EN” color=”orange”></inbox>
可以这样读取language和color:
print( inbox.properties[“language”] ) -- EN print( inbox.property[“color”] ) -- orange
编后语:其实corona提供的json库可以完成和达到类似的功能,只是xml更通用和灵活,后面我们再介绍json。