문제

XML을 ActionScript2의 객체에 구문 분석하는 효율적이고 재사용 가능한 방법을 찾고 있습니다. XML 구조 자체가 변경 될 수 있으므로 '하드 코딩'특정 노드 등으로 XML을 구문 분석 할 수 있어야합니다.

XML 클래스가 쉽게 드릴 수 있기 때문에 일반적으로 AS3를 사용하고 다음과 같은 것이 필요하지 않습니다. 아래는 내가 달성하려는 것의 AS3 의사 코드입니다.

    public function XmlObject(myXmlObject:XML,_node:String):Object
    {
        var xmlObj:Object=new Object();

        for(var node:uint=0;node<myXmlObject[_node].children().length();node++)
        {
            var attributesList:XMLList=myXmlObject[_node].children()[node].attributes();
            var nodeName:String=myXmlObject[_node].children()[node].name(); 

            switch(attributesList.length()>1)
            {
                //////////////////////
                case false:
                //////////////////////
                {
                  for each(var attribute:XML in attributesList)
                  { 
                    xmlObj[nodeName]=attribute;
                  } 
                break;


                //////////////////////
                case true:
                //////////////////////
                var values:Array=[];
                for each(attribute in attributesList)
                {
                    values.push(attribute);
                    xmlObj[nodeName][String(attribute.name())]=attribute;
                }   
                break;
            }
        }
    return xmlObj;
    }

이에 대한 도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

나는 당신의 의사 코드를 완전히 이해하지 못했습니다 ... 어레이에 무슨 일이 일어나는지 values? 단순히 버려지는 것 같습니다 ... 또한 재귀가 아닌 것 같습니다 ...

문제는 XML과 ECMA-Objects의 의미론이 다르다는 것입니다 ...

이것을 무엇에 매핑 하시겠습니까?

<cart><item /><item /></cart>

그리고 이것이 무엇입니까?

<cart><item /><cart>

그리고이게 뭐야?

<cart />

문제는 첫 번째 경우에는 배열, 두 번째 속성에는 세 번째 속성에 아무것도 없다는 것입니다 ... 그래서 당신은 알 수 없습니다. cart.item 말하더라도, 단일 하위 노드는 배열로 싸여있을 때 여전히 입력 할 수 없으므로 cart.item ~이다 null ... 당신이 속성에 액세스하면 AS2가 불평하지 않습니다. null 그러나 여전히, 이것은 꽤 멍청합니다 ...

E4X는 ECMA 세계에서 XML 객체를 가로 지르는 가장 좋은 방법 인 것 같습니다 ... 약간의 생각을 한 후에, 나는 약간 (매우 해체 된) 라이브러리를 모았습니다. http://code.google.com/p/as24x/그래도 더 많은 기능을 지원하는 Google에서 다른 라이브러리를 찾을 수 있습니다 ... 오히려 구문에 관한 것입니다 ...

도움이 되었기를 바랍니다 ;)

인사

back2dos

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top