2009-10-10 1 views
1

나는 다음과 같이 보일 노드와 문서를 구문 분석을 시도하고있다 :E4X : 네임 스페이스가 지정된 노드와 평가할 변수가있는 문서를 구문 분석 하시겠습니까?

<doc> 
<results> 
     <result xmlns="http://www.inktomi.com/"> 
      <title>Senate Panel to Review Election Unit Sale</title> 
     </result> 
</result> 
</doc> 

네임 스페이스 및 결과의 노드 이름이 다를 수 있습니다 그러나. 그렇지 그렇게한다면, 이것은 작동합니다 :

results..*::title //>Senate Panel to ... 

하지만이 나던 일 :

var myvar = "title" 
results..*::[myvar] 

단서를?

답변

0

분명히 어떤 네임 스페이스를 선택하기 위해 어린이와 *의 사용을 액세스하는 대괄호 방법은 VerifyError 클래스는 경우 잘못되었거나 손상된 SWF 파일을 발생하는 오류를 나타냅니다

var doc:XML = 
<doc> 
    <results> 
     <result xmlns="http://www.inktomi.com/"> 
      <title>Senate Panel to Review Election Unit Sale</title> 
     </result> 
    </results> 
</doc>; 
var ns:Namespace = new Namespace("http://www.inktomi.com/"); 
trace(doc..*::title.toXMLString()); //These three 
trace(doc.results.*::result);  //lines compile 
trace(doc.results.ns::["result"]); //and run as expected 
//This commented out line compiles but throws 2 verify errors in the run time 
//trace(doc.results.*::["result"]); 

VerifyError: Error #1080: Illegal value for namespace.
ReferenceError: Error #1065: Variable Test is not defined.

함께 사용할 수 없다 마주 친다.

0

E4X 솔루션이 아니지만 xml.namespaceDeclarations()에서 반환 된 사용 가능한 모든 네임 스페이스를 반복 할 수 있으며 첫 번째 자식을 얻거나 대괄호를 사용하여 액세스 할 수 있습니다.

xml을 사전에 구문 분석하고 모든 네임 스페이스를 빠른 수정으로 동일하게 만들 수도 있습니다.

1

그래서 올바른 해결책은 분명하다 :

var myvar = "title" 
var ans = results..*.(localName()==myvar); 

덕분에 대답 멋진 하나

+0

을 찾는 트위터에 @xtyler 할 수 있습니다. – Amarghosh