跟外部的接口对接,很多接口都是http-xml的形式。
而且要求要把table中的元素按照key的ascii码升序排序后再组装成key-value的xml格式。
比如有一个table,tbl
tbl = {a=5,d=1,b=2,e=4,c=9}
需要组装成如下的xml
<xml>
<a>5</a>
<b>2</b>
<c>9</c>
<d>1</d>
<e>4</e>
</xml>
testsort.lua的代码如下
--打印table
function printTab(tab)
for i,v in pairs(tab) do
print(i,v)
end
end
--把table按照key的升序排列并转换成xml
local function table2xml(to_xml)
local sorted_tbl ={}
--1,使用table本身的下标遍历取值,如to_xml[1] = "a=5"
for i in pairs(to_xml) do
--to_xml[i]的值插入到sorted_tbl中
table.insert(sorted_tbl,i)
end
--2,排序,当table是这种格式{1="a=5",2="d=1"},可以使用sort函数进行排序
table.sort(sorted_tbl)
--3,接下来就是把sorted_tbl中的元素一个个组织成xml格式
local to_bank_msg = "<xml>"
for i, v in pairs(sorted_tbl) do
if v ~=nil and v ~="" then
to_bank_msg = to_bank_msg .. "<" .. v .. ">" .. to_xml[v] .. "</" .. v ..">"
end
end
to_bank_msg = to_bank_msg .. "</xml>"
return to_bank_msg
end
function main()
local tbl = {a=5,d=1,b=2,e=4,c=9}
printTab(tbl)
print("---------------")
local xml_msg = table2xml(tbl)
print(xml_msg)
end
main()
执行lua文件:lua testsort.lua
结果:<xml><a>5</a><b>2</b><c>9</c><d>1</d><e>4</e></xml>
排序成功