2010-01-10 5 views
0

그래서 약간 까다로운 문제가 있어요 ... 내가 쓰고 있어요 클래스 내에서 XML 파일을 생성하고있어AS3 : 삽입 XML 요소 알파벳 작성자 재산권

. 이제이 시작 XML했다 가정 해 봅시다 :

<base> 
    <container id="0"> 
     <element type="Image" x="0" y"0" /> 
     <element type="Image" x="100" y"0" /> 
    <container/> 
</base> 

내가 추가 <element> 년대를 추가 할. 정렬의 첫 번째 순서는 "유형", "x", "y"순입니다. 따라서 <element>의 새 "유형"을 추가하는 경우 "텍스트"유형이라고 가정 해 보겠습니다. "이미지"<element>의 뒤에 텍스트를 삽입하고 싶습니다. 예를 들어

는 ... 숫자 정렬은 아주 간단 기본적인 아이디어는 내가 각 <container><element> 년대를 더 추가로 정렬 된 목록을 유지하는 것입니다

<base> 
    <container id="0"> 
     <element type="Image" x="0" y"0" /> 
     <element type="Image" x="100" y"0" /> 
     <element type="Text" x="200" y"100" /> 
    <container/> 
</base> 

입니다

,하지만 난 알아낼 수 없습니다 알파벳 순으로 정렬하는 깨끗한 방법.

제안 사항에 감사드립니다.

내가 생각할 수있는 유일한 점은 유형을 배열로 가져 오는 것입니다. "새로운 유형"을 추가하고, indexOf()를 정렬하고 호출하십시오. 번호는 이전에 삽입해야하는 현재 위치 여야합니다 (SHOULD)? kludgy 느낌.

답변

0

모든 기존 XML 요소를 배열로 읽고 새 요소를 추가하고 배열을 정렬 한 다음 모든 요소를 ​​다시 작성하는 것이 좋습니다. 이것은 각각의 새로운 요소가 어느 색인에 삽입되어야 하는지를 알아내는 것보다 쉽습니다. 그러나 이것은 상황에 따라 매우 효율적이지 않을 수도 있습니다.

정렬을하고, 나는이 (테스트되지 않은) 같은 것을 시도 할 것이다 :

array.sort(function (a:XML, b:XML) { 
    if ([email protected] < [email protected]) return -1; 
    if ([email protected] > [email protected]) return +1; 
    if (Number([email protected]) != Number([email protected])) return Number([email protected]) - Number([email protected]); 
    return Number([email protected]) - Number([email protected]); 
}); 

편집 : 추가 된 기능을 비교 정렬에 캐스트.

0

XML 구조를 변경할 수 있습니까? <images> 노드에있는 모든 이미지 요소, <texts> 노드에있는 텍스트 요소 등을 래핑 할 수 있으며, 올바른 방법으로 요소를 추가하는 것이 쉽습니다.

base.container.*.element에 액세스하여 여전히 모든 <element> 노드를 가져올 수 있습니다.

-1

... 유효한 XML이 있고 원본 XML과 동일한 루트 자식을 사용하여 정렬 된 XML에 대한 변수를 만드는 것으로 가정합니다. 내 장치는 단지 우연히 발생했습니다.

var sortedXML:XML = <devices></devices>; 

function sortBy(xmlFile:XML , field:String, order:int) 
{ 
    // array that will hold index of nodes 
    var arr:Array = new Array(); 
    // loop through nodes 
    for each (var someNode:XML in xmlFile.*) 
    { 
     // array gets populated with node that matches 'field' 
     arr.push(someNode.child(field)); 
    } 
    // sort the 'arr' array alphabetically 
    arr.sort(); 

    // reverse the alphabetical order if necessary 
    if (order == -1) 
    { 
     arr.reverse(); 
    } 

    // append the nodes in from the source, in the order of the array 
    for (var i:int=0; i<arr.length; i++) 
    { 
    sortedXML.appendChild(myXML.device.(child(field) == arr[i])); 
    } 
} 
// trace your original xml then trace sortedXML to verify 
+0

당신이 눈치 확인, 호출이 ID 노드 sortBy에 의해 내 장치를 정렬하는 것이었다 내 XML에 대한 ... 예제의 함수에는 전화가 없다 (인 myXML "의 DeviceID", 1); -1을 제외한 모든 정수는 오름차순으로 정렬됩니다. 아마 if (order == -1)에서 if (order <0)로 바뀌면 양수는 앞으로 정렬되고 negs는 역순으로 정렬됩니다. – Breezy3Stacks