Вопрос

Я ищу эффективный и многоразовый способ синтаксического анализа XML в объект в ActionScript2.Сама структура xml может измениться, поэтому важно, чтобы я мог анализировать xml без «жесткого кодирования» конкретных узлов и т. д.

Обычно я использую As3, и мне не нужно что-то подобное, поскольку класс XML легко детализировать.Ниже приведен псевдокод 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-объектов разная...

с чем бы вы это сопоставили?

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

и что тогда это будет?

<cart><item /><cart>

и что это?

<cart />

проблема в том, что в первом случае у вас есть массив, во втором свойство, в третьем ничего...так что ты не можешь знать, что cart.item будет ...даже если вы скажете, что отдельные дочерние узлы будут заключены в массив, у вас все равно может не быть записи, и, следовательно, cart.item является null ...не то чтобы as2 будет жаловаться, если вы получите доступ к свойствам null но всё равно это довольно некрасиво...

e4x кажется лучшим способом перемещения по XML-объектам из мира ECMA...немного подумав, я собрал небольшую (довольно хакерскую) библиотеку: http://code.google.com/p/as24x/вы можете найти другие библиотеки в Google, которые поддерживают больше функций...дело скорее в синтаксисе...

надеюсь это поможет ;)

приветствие

back2dos

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top