2011-04-21 23 views
0

例後人:AS3:用倍數條件我XML列表

<listnode> 
    <nodeA id="1"> 
     <nodeB id="1" /> 
    </nodeA> 
    <nodeA id="2"> 
     <nodeB id="2" /> 
    </nodeA> 
</listnode> 

<listnode> 
    <nodeA id="2"> 
     <nodeB id="2" /> 
    </nodeA> 
    <nodeA id="1"> 
     <nodeB id="3" /> 
    </nodeA> 
    <nodeA id="5"> 
     <nodeB id="1" /> 
    </nodeA> 
</listnode> 

<listnode> 
    ... etc 

我試圖讓基於多個條件的XML列表。隨着一個條件,它的罰款,使用類似:

var list:XMLList = list.(descendants("nodeA")[email protected]("1")); 

這給了我所有的listnode的列表中列表有一個名爲nodeA上任何後代與屬性ID = 1

如何檢索相同的列表,但也查看IDnodeB節點?喜歡的東西:

var list:XMLList = list.(descendants("nodeA")[email protected]("1") && nodeA.descendants("nodeB")[email protected]("3")); 

在這個例子中,應該給我一個清單,一個節點:

<listnode> 
    <nodeA id="2"> 
     <nodeB id="2" /> 
    </nodeA> 
    <nodeA id="1"> 
     <nodeB id="3" /> 
    </nodeA> 
    <nodeA id="5"> 
     <nodeB id="1" /> 
    </nodeA> 
</listnode> 

因爲它有一個與nodeA上ID = 1誰擁有ID = 3節點B。

任何想法?

+0

@locrizak:THX的答覆,但我看不出如何準確應用,爲我的代碼。你可以再詳細一點嗎? – 2011-04-21 19:56:10

+0

var list:XMLList = list..nodeA。(@ id ==「1」).. nodeB。(@ id ==「3」);如果有效,我會解釋它的工作方式。 – locrizak 2011-04-21 19:59:08

+0

這給了我一個nodeB的列表,但我需要的是一個listnode列表,匹配這些條件......你知道如何得到它嗎? – 2011-04-21 20:16:12

回答

1

修訂

list.(descendants("nodeA").(@id.contains("1") && descendants("nodeB")[email protected]("3")).length() > 0) 

這個怎麼樣?

+0

@Timofei Davydik:謝謝你,但該行的代碼返回與那些屬性的任何後代的所有節點,即使有節點B id = 3不在id = 1的nodeA中。我想檢查節點nodeA中ID = 3的節點B,它們的id = 1,如果兩者都爲真,則返回包含該節點的listnode。 – 2011-04-21 20:26:40

+0

@Albert R哦,我第一次弄錯了,現在明白了。我會嘗試修復它 – 2011-04-21 20:41:23

+0

@Timofei Davydik:謝謝你,我會很感激的是,我已經嘗試了很多東西diferent但沒有工作...... – 2011-04-21 20:49:42

0

是的,條件可被結合。

var list:XML = <list> 
<listnode> 
    <nodeA id="1"> 
     <nodeB id="1" /> 
    </nodeA> 
    <nodeA id="2"> 
     <nodeB id="2" /> 
    </nodeA> 
</listnode> 

<listnode> 
    <nodeA id="2"> 
     <nodeB id="2" /> 
    </nodeA> 
    <nodeA id="1"> 
     <nodeB id="3" /> 
    </nodeA> 
    <nodeA id="5"> 
     <nodeB id="1" /> 
    </nodeA> 
</listnode> 
</list>; 
var result:XMLList = list.listnode.descendants("*").(@id=="1" && children().length() > 0); 
+0

thx爲您的答覆。關鍵是,我不能在你的,你正在檢查2個條件代碼行看到,我只看到一個... – 2011-04-21 20:14:42

+0

'@id ==「1」 &&兒童()。長度()> 0' - 這是兩個條件,由AND組合。你也可以使用OR。 – alxx 2011-04-22 06:39:15

+0

謝謝alxx,我解決了這個問題已經由於Timofei,但我真的很感謝你的建議也 – 2011-04-22 06:41:41