【问题标题】:ActionScript: how can I get xml nodes by attributesActionScript:如何按属性获取 xml 节点
【发布时间】:2010-10-22 07:35:11
【问题描述】:

我下面有 XML

<node id="id1"/><node id="id2"/>...
<edge id="eid1" fromId="id1" toId="id2"/>
<edge id="eid2" fromId="id3" toId="id1"/>
<edge id="eid3" fromId="id2" toId="id4"/>

现在我需要基于 nodeId 获取所有边缘,

nodeId = id1  -> eid1, eid2
nodeId = id2  -> eid1, eid3
nodeId = id3  -> eid2
nodeId = id5  -> Null

【问题讨论】:

    标签: xml apache-flex actionscript-3


    【解决方案1】:

    试试这个:document.edges.(@fromId == "id1"),其中document 是您的 XML 对象。 您还可以遍历边缘以找到您需要的边缘:

    for each (var edge:XML in document.elements("edge"))
    {
        if (edge.@fromId == "id1")
        {
            //do something
        }
    }
    

    【讨论】:

      【解决方案2】:
      var x:XML = <graph>
          <node id="id1"/>
          <node id="id2"/>
          <node id="id3"/>
          <node id="id4"/>
          <node id="id5"/>
          <edge id="eid1" fromId="id1" toId="id2"/>
          <edge id="eid2" fromId="id3" toId="id1"/>
          <edge id="eid3" fromId="id2" toId="id4"/>
      </graph>;
      
      var nodes:XMLList = x.node;
      for(var i = 0; i < nodes.length(); i++)
      {
        var edges = x.edge.(@fromId == nodes[i].@id || @toId == nodes[i].@id);
        trace("Node #" + nodes[i].@id + " " + edges.length());
        for(var j = 0; j < edges.length(); j++)
           trace(edges[j].@id.toString());
      }
      

      输出:

      Node #id1 2
      eid1
      eid2
      Node #id2 2
      eid1
      eid3
      Node #id3 1
      eid2
      Node #id4 1
      eid3
      Node #id5 0
      

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多