2012-01-19 48 views
0

我需要訪問我的XML中的信息。FLEX - 檢查parent()是否存在?

我需要的信息不是存儲在我的XML中的每個對象上,只存儲在父對象上。但是我怎樣才能檢查是否有父母,所以在選擇樹中的第一個對象(沒有父母)時不會拋出錯誤?

這是我現在使用的代碼,它適用於除了沒有父母的對象之外的所有內容。

 public function getParentItem():String{ 
      var selectedItem:XML = treeView.selectedItem; 

      while([email protected] == ""){ 
       selectedItem = selectedItem.parent(); 
      } 

      return [email protected]; 

     } 

我想我會添加一個if循環來檢查是否父親存在,但不知道我該怎麼做。

謝謝!

回答

0

會爲你下面的工作:

public function getParentItem():String{ 
    var selectedItem:XML = treeView.selectedItem; 

    while(selectedItem) 
    { 
     var closeAttribute:String = [email protected]; 

     if(closeAttribute && closeAttribute != "") return closeAttribute; 
     else selectedItem = selectedItem.parent(); 
    } 

    return null; 
} 

基本上它應該工作它的方式XML樹尋找具有無「關閉」屬性的「價值」的一個節點。如果XML節點沒有父節點,它將停止(在這種情況下,它將返回空)。

或者這裏是完成遞歸相同的功能(爲什麼不!);)

public function getParentItem() : String 
{ 
    return findCloseAttribute(XML(treeView.selectedItem)); 
} 

private function findCloseAttribute(xml:XML) : String 
{ 
    if(xml) 
    { 
     var closeAttribute:String = [email protected]; 

     if(closeAttribute && closeAttribute != "") return closeAttribute; 
     else return findCloseAttribute(xml.parent()); 
    } 
    else 
    { 
     return null; 
    } 
} 
+0

謝謝快速和良好的答覆。我會通讀它,看看你做了什麼。現在我用了一個try-catch來處理它。 非常感謝您的時間和幫助! –

+0

如果您知道錯誤可能發生,但您無法真正控制錯誤的來源,請嘗試使用catch塊。在這種情況下,您總是可以避免使用空引用,所以我強烈建議您使用@Richie_W解決方案而不是try catch – Exort