Фильтр Actionscript xml по атрибуту дочернего узла - PullRequest
0 голосов
/ 31 декабря 2010

новичок в as4, пытающийся выяснить, как фильтровать xml по атрибуту его дочернего узла.Что-то вроде следующего.

<root>
<level1 id="1">
    <level2>
        <sample class="C1" />
        <sample class="C2" />
        <sample class="C3" />
    </level2>
</level1>
<level1 id="2">
    <level2>
        <sample class="C1" />
        <sample class="C3" />
    </level2>
</level1>
<level1 id="3">
    <level2>
        <sample class="C1" />
    </level2>
</level1>
<level1 id="3">
    <level2>
        <sample class="C2" />
    </level2>
</level1>
</root>

Цель состоит в том, чтобы получить список УРОВНЕЙ1 и УРОВНЯ2, которые содержат ОБРАЗЕЦ с классом = "C1".Примерно как в следующем XMLList.

<root>
<level1 id="1">
    <level2>
        <sample class="C1" />
        <sample class="C2" />
        <sample class="C3" />
    </level2>
</level1>
<level1 id="2">
    <level2>
        <sample class="C1" />
        <sample class="C3" />
    </level2>
</level1>
<level1 id="3">
    <level2>
        <sample class="C1" />
    </level2>
</level1>
</root>

ИЛИ

<root>
<level1 id="1">
    <level2>
    </level2>
</level1>
<level1 id="2">
    <level2>
    </level2>
</level1>
<level1 id="3">
    <level2>
    </level2>
</level1>
</root>

Ответы [ 2 ]

0 голосов
/ 02 января 2011

Я бы сделал это следующим образом:

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML(); 
xmlLoader.addEventListener(Event.COMPLETE, parseXML);
xmlLoader.load(new URLRequest("put-your-link-to-your-xml-file-here"));

     function parseXML(e:Event):void {

     xmlData = new XML(e.target.data);
     xmlData.ignoreWhiteSpace = xmlData.ignoreComments = true;

     var xmlList:XMLList = new XMLList();
     var i:uint = 0;
     var l:uint = xmlData.level1.length();
     while(i<l)
     {
         var j:uint = 0;
         var m:uint = xml.level1[i].level2.sample.length();
         while(j<m)
         {
             if(xml.level1[i].level2.sample[j].@cls == "C1")
             {
                 xmlList += xml.level1[i];
                 break;
             }
             ++j;
         }
         ++i;
     }
     trace(xmlList);

С этим вы получите xmlList, как вы сказали в первом примере.

Надеюсь, что это так, Роб

0 голосов
/ 02 января 2011

В ActionScript 3.0:

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
 
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
 
xmlLoader.load(new URLRequest("put-your-link-to-your-xml-file-here"));
 
function LoadXML(e:Event):void {

xmlData = new XML(e.target.data);

trace(xmlData); // traces the raw data
trace(root.level1.level2); // traces level 2
trace(root.level1.level2.text()); // can trace the text node of level 2, kind of similar
trace(root.level1.@class); // traces the "class" attribute inside level 1

var level-1-List:XMLList = root.level1; //gets an array of all level1

for each (var itemElement:XML in level-1-List) {

trace(itemElement); // loop through list and trace it

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