2013-10-06 49 views
0

我正尝试在Flash AS3中使用XML。将路径保存到xml节点以避免稍后搜索

var record:XML = 
<person name="Peter(Grandfather)" age=54> 
     <person name = "john(son1)" age = 28 > 
      <person name = "bran(grandson1)" age = 2 /> 
     </person> 
     <Person name = "Rob(son2)" age = 25 > 
      <person name = "lancel(grandson2)" age = 3 /> 
     </person> 

<person> 

此XML列表将被动态更新。对于每个新增人员动态添加,将创建一个包含该人名字的影片剪辑并添加到舞台中。当单击电影剪辑时,我希望该人的年龄增加1.

我想到的一种方法是将该人的姓名保存在影片剪辑中。像

... 
record.person.addChild(newperson); 
var newclip:movieClip = new MovieClip; 
newClip.name = [email protected] 
... 
<newClip mouse click event> 
record..*.(@name==newClip.name)[email protected] += 1; 
.... 

我不喜欢这种方法的唯一的事情是,它需要@name == newClip.name comparision;我想这需要与xml记录中的每个节点进行名称匹配,这对于大型XML记录来说是相当苛刻的过程。我只需要一个很好的方法将路径保存到给定的xml节点,以便稍后可以直接访问它。

是这样的: 所以,

... 
record.person.addChild(newperson); 
var newclip:movieClip = new MovieClip; 
newClip.xmlref = "<What to put here?>" 
... 
<newClip mouse click event> 
record.[newClip.xmlref][email protected] += 1; //I want to be able to do something like this 
.... 

谢谢。

+0

为什么你想用XML做到这一点? – Pier

回答

0
package { 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

/** 
* ... 
* @author Xiler 
*/ 
// CLASS TO TEST IT 
public class XMLtest extends MovieClip { 

    // YOUR XML TREE HERE 
    private var record:XML = 
    <person name="Peter(Grandfather)" age="54"> 
      <person name = "john(son1)" age = "28" > 
       <person name = "bran(grandson1)" age = "2" /> 
      </person> 

      <person name = "Rob(son2)" age = "25" > 
       <person name = "lancel(grandson2)" age = "3" /> 
      </person> 
    </person> 
    public function XMLtest() { 
     // HERE, WE CREATE A NEW XML, ADD IT TO THE TREE, MAKE A MOVIECLIP WITH A REFERENCE TO IT, AND ADD IT TO THE STAGE WITH A LISTENER 
     var newPerson:XML = < person name = "Bob(son3)" age = "19" />; 
     record.appendChild(newPerson); 
     var test1:MovieClip = new MovieClip(); 
     addChild(test1); 
     test1.xmlRef = newPerson; 
     test1.graphics.beginFill(0x41ED07, 1); 
     test1.graphics.drawRect(0, 0, 100, 100); 
     test1.addEventListener(MouseEvent.CLICK, testListener); 
    } 
    private function testListener(event:MouseEvent = null):void { 
     // HERE, IT IS CLICKED, AND THE record XML IS UPDATED AND TRACED, SO THAT YOU KNOW IT CHANGED IT. 
     var itsXML:XML = event.currentTarget.xmlRef; 
     var newAge:Number = Number([email protected]) + 1; 
     [email protected] = String(newAge); 

     trace([email protected]); 
     trace(record) 
    } 
} 
} 

这对我有效。只需将它复制并粘贴到一个.as文件的主.as文件中,然后测试并查看它的工作情况。我希望这能回答你的问题,如果你需要进一步的帮助,请回复。