2012-01-21 66 views
9

我正在讀取AS3中的XML文件。我需要找出節點上是否存在屬性。我想做類似的事情:如何測試是否使用AS3在XML節點中設置了屬性

if(xmlIn.attribute("id")){ 
foo(xmlIn.attribute("id"); // xmlIn is of type XML 
} 

但是這並不奏效。上面的if語句總是如此,即使屬性ID不在節點上。

回答

18

你必須這樣做,而不是:

if(xmlIn.hasOwnProperty("@id")){ 
    foo(xmlIn.attribute("id"); // xmlIn is of type XML 
} 

在XML E4X解析,你必須使用hasOwnProperty檢查,如果該屬性爲設定的E4X XML對象節點上的屬性。希望這可以幫助!

+0

謝謝你,我認爲我的解決方案很爛。 hasOwnProperty方法取得了訣竅。 – Boundless

+0

你如何檢查它是否爲空? – Livi17

0

我想通了。對於具有相同問題的其他人來說,它似乎檢查該屬性的長度是否大於0。

if(xmlIn.attribute("id").length() >0){ 
foo(xmlIn.attribute("id"); // xmlIn is of type XML 
} 

我不知道這是否適用於所有情況,但它對我有用。如果有更好的方法來做到這一點,請發佈它。

+0

嘿無邊,看到我的其他答案。使用hasOwnProperty比創建屬性數組更有效,然後對數組索引進行計數,以確定它是否存在。但是,如果性能不是問題,這肯定會起作用。 –

+0

@JonathanDunlap謝謝,表現是一個問題(但我仍然使用Flash,真是太遺憾了)。您的上述解決方案hasOwnProperty效果很好,謝謝。 – Boundless

3

最簡單的方法:

(@id in xmlIn) 

如果ID attrtibute存在,否則爲false,這將返回true。

+2

運算符'in'需要字符串,你必須寫'('@id'in xmlIn)' – marbel82

5

我發現了4種方式:

if ('@id' in xmlIn) 
if (xmlIn.hasOwnProperty("@id")) 
if ([email protected]() > 0) 
if (xmlIn.attribute("id").length() > 0) 

,我prefere第一種方法:

if ('@id' in xmlIn) 
{ 
    foo([email protected]); 
} 
相關問題