2010-12-30 10 views
0

나는 지금 문제가 있음에도 불구하고 내 대답을 보았지만 내 것은 중첩 된 문제입니다.중첩 된 xml 요소의 네임 스페이스

나는 XML은 다음과 같이보고했다 :

지금
> 
<em> 
<type xmlns="http://www.sitcom-project.org/sitcom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <model> 
    <implemented_with>comoco</implemented_with> 
    <implemented_in>perl</implemented_in> 
    <cash_flow>casual</cash_flow> 
    <interaction>conventional</interaction> 
    </model> 
</type> 
</em> 

, 어떻게 implemented_with 노드의 요소에 액세스합니까?

ofc 나는 다음과 같이 xmlList에 액세스 할 수 있습니다. namespace ns = www.sitcom-project.org/sitcom; type.ns :: model; 하지만 이제 어떻게 모델 xmlList의 구현 된 노드에 액세스합니까? 나는 type.ns :: model.implemented_with를 시도했지만 작동하지 않았습니다. 누구 한테 아이디어있어? 감사합니다.

답변

1

이렇게하는 데는 몇 가지 방법이 있지만 가장 좋은 방법은 각 도트 액세스 전에 네임 스페이스 접두사를 사용하는 것입니다. 귀하의 경우에 가장 먼저하고 싶은 일은 네임 스페이스를 격리하는 것입니다. 네임 스페이스를 새로운 네임 스페이스 개체로 하드 코딩하면됩니다.

var ns:Namespace = new Namespace("http://www.sitcom-project.org/sitcom"); 

또는 더 좋은 방법은 적절한 노드에서 추출하는 것입니다. 다음 코드에서는 형식 노드에서 선언 된 모든 네임 스페이스 (배열)를 가져오고 목록의 첫 번째 대상을 대상으로합니다. 미리 네임 스페이스를 모르기 때문에 children() 메서드를 사용하여 네임 스페이스를 검색해야합니다.

var emNode:XML = _yourXML.em[0]; 
var typeRoot:XML = emNode.children()[0]; 
var ns:Namespace = typeRoot.namespaceDeclarations()[0]; 

이 작업을 완료하면 네임 스페이스 구문을 사용하여 모델을 파헤 칠 수 있습니다.

var impWith:String = typeRoot.ns::model.ns::implemented_with; 

다음과 같은 구문을 사용하여 기본 네임 스페이스를 설정할 수 있습니다. 나는 이것을 개인적으로 좋아하지 않지만 그것이 효과가있다.

default xml namespace = ns; 
var impWith:String = typeRoot.model.implemented_with; 
default xml namespace = null; 

간단한 한 줄짜리 수 있습니다.

var ns:Namespace = new Namespace("http://www.sitcom-project.org/sitcom"); 
var imp:String = _yourXML.em[0].ns::type.ns::model.ns::implemented_with; 

기본 구문이 도움이

default xml namespace = new Namespace("http://www.sitcom-project.org/sitcom"); 
var imp:String = _yourXML.em[0].type.model.implemented_with; 
default xml namespace = null; 

희망을 사용.

+0

ActionScript에는 'default xml namespace'가있는 catch가 있습니다. 작업을 마쳤 으면 빈 네임 스페이스로 재설정해야합니다. 그렇지 않으면 런타임 오류가 발생할 수 있습니다. – alxx

+0

내 대답을 편집하여 내 의견을 반영합니다. – Nicholas