2011-04-21 5 views
0

예와 자손 : 나는 여러 조건을 기반으로 XML 목록을 얻으려고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 

. 하나 개의 조건으로, 그것은 같은 것을 사용하여, 괜찮아요 :이 목록 속성 ID = 1로 nodeA에서라는 이름의 자손이 나에게 모든 listnode의 목록을 제공

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

.

어떻게 같은 목록을 검색 할 수 있지만 의 ID 노드 B 노드의 위해도를 찾고 계십니까? 같은 뭔가 :이 예에서

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> 

를이 식 3과 노드 B를 가지고 ID = 1과 함께 nodeA에서이 있기 때문에.

아이디어가 있으십니까?

+0

@locrizak : 답장을 보내고 싶지만 정확히 어떻게 코드를 적용 할 수 있는지 알 수 없습니다. 당신은 더 구체적 일 수 있습니까? –

+0

var list : XMLList = list..nodeA. (@ id == "1") .. nodeB. (@ id == "3"); 작동한다면 어떻게 작동하는지 설명하겠습니다. – locrizak

+0

그게 nodeB의 목록을 제공하지만, 내가 필요한 것은 그 조건들과 일치하는 listnode의리스트입니다 ... 당신은 그것을 얻는 방법을 알고 있습니까? 귀하의 회신에 –

답변

1

이 약

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

무엇 업데이트?

+0

@ Timofei Davydik : 감사합니다,하지만 그 코드 라인은 그 속성을 가진 자손과 함께 모든 노드를 반환합니다. id = 3은 id = 1 인 nodeA 안에 없습니다. id = 1 인 노드 nodeA 내에서만 nodeB의 id = 3을 확인하고 두 노드가 모두 true이면 해당 노드를 포함하는 list 노드를 반환합니다. –

+0

@Albert R 아, 처음 잘못 생각했습니다. 이해합니다. 나는 그것을 고치려고 노력할 것이다 –

+0

@Timofei Davydik : 고맙다, 나는 정말로 감사 할 것이다, 나는 많은 다른 것들을 시도했지만 아무도 작동하지 않는다 ... –

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입니다. 문제는 두 가지 조건을 검사하는 코드 줄에서 볼 수 없다는 것입니다. –

+0

'@id == "1"&& children(). length()> 0' - AND로 결합 된 두 가지 조건입니다. OR을 사용할 수도 있습니다. – alxx

+0

감사합니다 alxx, 나는 Timofei 덕분에 이미 그것을 해결했지만, 정말 조언을 주셔서 감사합니다 또한 –