Рекурсивный анализ XML в Actionscript 2 - PullRequest
1 голос
/ 19 мая 2009

Я ищу эффективный и многократно используемый способ синтаксического анализа 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;
    }

Заранее спасибо за любую помощь в этом!

1 Ответ

1 голос
/ 03 июня 2009

Я не полностью понял ваш псевдокод ... что происходит с массивом 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, которые поддерживают больше функций ... это скорее о синтаксисе ...

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

Greetz

back2dos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...