使用LuaXML将Lua表解析为Xml

我正在使用luaxml将Lua表转换为xml。我在使用luaxml时遇到了问题,例如,我有一个lua表格,如下所示:

t = {name="John", age=23, contact={email="john@gmail.com", mobile=12345678}}

当我尝试使用LuaXML时,

local x = xml.new("person")
x:append("name")[1] = John
x:append("age")[1] = 23
x1 = xml.new("contact")
x1:append("email")[1] = "john@gmail.com"
x1:append("mobile")[1] = 12345678
x:append("contact")[1] =  x1

生成的xml变成了:

<person>
  <name>John</name>
  <age>23</age>
  <contact>
    <contact>
      <email>john@gmail.com</email>
      <mobile>12345678</mobile>
    </contact>
  </contact>
</person>`

Xml中有2个联系人。我该怎么做才能使Xml正确?

此外,我如何将XML转换回Lua表?

原文链接 https://stackoverflow.com/questions/10484331

点赞
stackoverflow用户1208078
stackoverflow用户1208078

你的语法有点小问题,你为联系人创建了一个新表,然后使用以下代码同时附加了一个“联系人”节点并另外分配了一个:

x1 = xml.new("contact")
x1:append("email")[1] = "john@gmail.com"
x1:append("mobile")[1] = 12345678
x:append("contact")[1] = x1

实际上应该是:

local contact = xml.new("contact")
contact.email = xml.new("email")
table.insert(contact.email, "john@gmail.com")

contact.mobile = xml.new("mobile")
table.insert(contact.mobile, 12345678)

请记住,每个“节点”都是其自己的表值,这就是xml.new()返回的内容。

当你调用 xml.save(x, "\some\filepath") 时以下代码可以正确创建XML。请记住,每当你调用xml.new()时,你都会得到一个表格返回值,我想在那里做出决策可以很容易地设置属性……但使添加简单值的语法有点啰嗦。

-- 生成根节点
local root = xml.new("person")

-- 创建一个新的名字节点来附加到根部
local name = xml.new("name")
-- 将值放入名字标记
table.insert(name, "John")

-- 创建一个新的年龄节点来附加到根部
local age = xml.new("age")
-- 将值放入年龄标记
table.insert(age, 23)

-- 这实际上将“名称”和“年龄”标签添加到根元素中
root:append(name)
root:append(age)

-- 创建一个新的联系人节点
local contact = xml.new("contact")
-- 为联系人创建名为电子邮件的子标记
contact.email = xml.new("email")
-- 将其值插入电子邮件表中
table.insert(contact.email, "john@gmail.com")

-- 为联系人创建名为手机的子标记
contact.mobile = xml.new("mobile")
table.insert(contact.mobile, 12345678)

-- 添加联系人节点,因为它包含了其子标记的所有信息,所以我们不必担心显式添加子标记。
root.append(contact)

遵循该示例,您应该可以轻松地看出如何任意深度地探索XML。 您甚至可以编写函数来轻松实现创建子标记,以使代码更简洁...

2012-05-08 02:21:29
stackoverflow用户4074771
stackoverflow用户4074771
```lua
local x = xml.new("person")
x:append("name")[1] = "John"
x:append("age")[1] = 23
x1 = x:append("contact")
x1:append("email")[1] = "john@gmail.com"
x1:append("mobile")[1] = 12345678

print(x)

本地定义一个变量 x 并使用 xml.new 函数创建一个名为 "person" 的新 XML 对象。接着,使用 x:append 函数往 XML 对象中添加 "name" 和 "age" 元素,并对它们的值进行赋值。然后,使用变量 x1 指向添加的 "contact" 元素,并在其下添加 "email" 和 "mobile" 子元素,同样对它们的值进行赋值。最后,使用 print 函数输出整个 XML 对象 x

2014-09-30 01:34:35