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>
答案 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。
希望就是这样, 罗布