ActionScript 2에서 XML을 재귀 적으로 구문 분석합니다
-
22-08-2019 - |
문제
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