2011-07-14 43 views
2

我試圖解析與Lua和 一些xml文件,我卡在這個函數:Lua的回報

function get_node_by_id (xml, nodeId) 
    for i=1, #xml, 1 do 
     if get_attr_by_name(xml[i], 'Id') == nodeId then 
      print ("TRUEEEEE", i, xml[i]) 
      return xml[i] 
     else 
      get_node_by_id(xml[i], nodeId) 
     end 
    end 
end 

的問題是,print("TRUEEEEE", i, xml[i])作品,但它在未來返回nilreturn xml[i]。 我在做什麼錯?

+1

這是根本不可能的,它打印XML的內容[I] OK,然後返回零...除非你有一些怪異metatable的東西去那裏。我會修改你的代碼示例。 – jpjacobs

+0

我知道這是不合邏輯的)))但它是)我無法想象最新的問題... – cyhiso

回答

7

您遞歸調用的功能,但只提供單一的回報。如果您碰巧在第二級找到了您要查找的節點,則只會將該值返回到第一級,而這對第一級沒有任何影響。

也許你想是這樣的(未測試的代碼):

function get_node_by_id (xml, nodeId) 
    for i=1, #xml, 1 do 
     if get_attr_by_name(xml[i], 'Id') == nodeId then 
      print ("TRUEEEEE", i, xml[i]) 
      return xml[i] 
     else 
      local node = get_node_by_id(xml[i], nodeId) 
      if node then return node end 
     end 
    end 
end 
+0

非常感謝!美麗!現在所有的作品都像一個魅力!!!!!!!!! – cyhiso

2

我認爲你缺少else塊一回:

return get_node_by_id(xml[i], nodeId)