【问题标题】:Actionscript filter xml by child node's attributeActionscript 按子节点的属性过滤 xml
【发布时间】:2011-06-02 02:07:00
【问题描述】:

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>

目标是获取包含 SAMPLE 和 class="C1" 的 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>

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

【问题讨论】:

  • "as4"?也许您在 AS3 中想到了 E4X?
  • 你好,Eatdoku,你有更近的吗?

标签: xml actionscript


【解决方案1】:

我会这样做:

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,就像你在第一个例子中所说的那样。

希望就是这样, 抢

【讨论】:

    【解决方案2】:

    在 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
    
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      相关资源
      最近更新 更多