2009-09-29 6 views
1

다음과 같은 XML이 있다고 가정 해보십시오.E4X에 배열을 전달할 수 있습니까?

<people> 
<person> 
    <name>Jake</name> 
    <skills> 
    <skill>JavaScript</skill> 
    <skill>HTML</skill> 
    <skill>Flex</skill> 
    <skill>CSS</skill> 
    </skills> 
</person> 
<person> 
    <name>John</name> 
    <skills> 
    <skill>C++</skill> 
    <skill>Foxpro</skill> 
    </skills> 
</person> 
<person> 
    <name>Josh</name> 
    <skills> 
    <skill>JavaScript</skill> 
    <skill>XML</skill> 
    <skill>Flex</skill> 
    </skills> 
</person> 
</people> 

E4X로 할 수있는 일은 내가 통과 한 기술 목록/배열과 일치하는 모든 사람 객체를 찾는 것입니다. 그래서, HTML 또는 JavaScript 기술을 가진 모든 사람들을 찾고 싶습니다.

people.person.(descendants("skill").contains("HTML")) 
people.person.(descendants("skill").contains("HTML")) 

하지만 실제로 (한 번에 한 줄만하면됩니다.) Flex에서는 XMLListCollection 필터 함수의 일부입니다.

이런 식으로 뭔가 이상적 일 것입니다.

people.person.(descendants("skill").contains("HTML","JavaScript")) 

그 주제에 대한 변형을 시도했지만 아무데도 없었습니다. 위대한 것이 무엇입니까 :

people.person.(descendants("skill").in("HTML", "JavaScript")) 

또는 이와 비슷한 것입니다.

내가하고있는 일이 가능하면 누구나 아는 사람이 있습니까?

정말 내 자신의 루프를 추가하지 않으려합니다.

Jake

답변

2

컴파일러와 함께이를 확인하지 않았다 그러나이 해야 작업 ... 여기

people.person.(descendants("skill").contains("HTML") || descendants("skill").contains("JavaScript")) 

다른 테이크 - 당신이 배열 내의에 대해 확인하려면

E4X 성명서, 나는 네가 운이 없다고 생각한다. 한 가지 가능한 해결 방법이 있지만 E4X 내부의 사용자 지정 함수를 사용하고 주 코드 블록 외부로 루프를 이동하는 것과 관련됩니다. 중복을 피하십시오. 실제로 루프를 피하려는 경우.

var skillsArray:Array = ["HTML", "JavaScript"]; 
var peopleWithSkills:XMLList = people.person.(matchSkills(descendants("skill"), skillsArray)); 

function matchSkills(xmlList:XMLList, skillsArray:Array):Boolean 
{ 
    for each (var personSkill:XML in xmlList) 
    { 
     if (skillsArray.indexOf(personSkill.toString()) > -1) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

내 최고의 제안은 정말 마음에보고 당신은 단지 그들을 피하고 싶은 경우 필요이 루프를 방지, 또는 여부를 결정하는 것입니다. ;)

+0

다시 Niko. 당신은 E4X 전문가입니까? 문제는 두 개의 알려진 값 대신 실제 배열 객체를 전달하려고합니다. Jake –

+0

전문가는 아니지만 이러한 문제를 해결하는 것을 즐깁니다. ;) –

+0

나는 네가 옳다고 생각해. 루프를 피하기보다는 회피하고 싶습니다. 솔루션에 다시 한 번 감사드립니다. 나는 문제를 해결하기 위해 코드를 가지고 놀아서 대답으로 표시 할 것이다. –