2011-05-16 2 views
0

AS3AS3 : 일치하는 경우 XPath는 XMLList 대신 XMLNode를 반환합니다.

XML 파일을 기반으로 그림을 동적으로로드하려고합니다. Im이 붙어있는 문제는 제공된 식별자에서 발견 된 노드를 반환해야하는 함수입니다. 다음 코드

function getStudyById(id:String):XMLNode{ 
    var xl:XMLList = xml.bacase.(@name==id); // xml is a global variable 
    return xl.children()[0]; // xl[0] does not work either 
    // return (xl.length()>0) ? xl[0] : null; 
} 

XML에서와 마찬가지로 은 다음과 같이 간다 : XML이로드 된 후

<root> 
    <bacase name="a" /> 
    <bacase name="b" /> 
</root> 

이 질문을 예상하고, 모두는 XML 로더의 COMPLETE 이벤트에서 이루어집니다.

이제 문제는 XMLList가 비어있는 것처럼 보이고 XML이 올바르게 채워지고 식별자가 노드 중 하나와 확실히 일치한다는 것입니다. 쿼리 된 노드를 복제 할 때 두 노드를 포함하는 것으로 올바르게 추적됩니다. 내 생각에, 일치하는 항목이 하나만있는 경우 XMLList가 만들어지지 않으며 XMLNode 데이터 형식의 데이터가 결과에 포함됩니다.

누구나 확인할 수 있습니까? 그렇다면 쿼리가 항상 XMLList 형식을 반환하도록하는 방법이 있습니까?

감사

답변

0

XMLNode 이전 flash.xml.XMLDocument에서만 작동 아르투르. XML 또는 XMLList을 사용하면 단일 노드의 유형은 XML입니다.

나를 위해 좋은 일을 냈다 :

var xml:XML = <root> 
     <bacase name="a" /> 
     <bacase name="b" /> 
    </root>; 

var p:XMLList = xml.bacase.(@name == "a"); 

if (p.length() > 0) return XML(p[0]); 
+0

네, 확실히, 나는 반환 형식으로하는 XMLNode을 사용하지만, 함수 내에서 나는 XPath 쿼리의 결과를 저장하는의 XMLList를 선언했다. 자, 스 니펫이 작동합니다. 감사합니다.하지만 방어 프로그래밍을 목표로하고 쿼리가 결과를 반환하는지 먼저 확인하고 싶습니다. 먼저 0 번째 자식을 참조하십시오. 쿼리가 단일 항목을 찾으면 XMLList가 만들어지지 않는다는 것이 매우 혼란 스럽습니다. – user776686

+0

** XMLNode **는 AS3 및 XMLDocument와 함께 사용하기 위해 배제됩니다. 'trace (xml.bacase. (@ name == "a"). length());'나를 위해 ** 1 **을 반환합니다. 함수 내에서 또는 함수 결과로 추적을 수행 했습니까? – DanielB

+0

내 대답을 약간 편집했습니다. XMLNode는 사용하지 말아야한다. – DanielB