Actionscript按子节点的属性过滤xml

时间:2010-12-31 18:44:05

标签: xml actionscript

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>

目标是获取包含带有class =“C1”的SAMPLE的LEVEL1和LEVEL2列表。类似于以下内容的结果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>

OR

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

2 个答案:

答案 0 :(得分:0)

在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

}
}

答案 1 :(得分:0)

我会这样做:

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。

希望就是这样, 罗布