2011-11-15 31 views
1

首先又一次(几乎所有的帖子都是这样),我几乎没有关于flash的知识,而且我正在努力实现非常复杂的事情,所以请在您的回复中予以善待。此外,所有这一切都发生在个人电脑本地,所以没有净问题。在Flash文件中解析XML

基本上,我有第三方程序生成下面的xml文件,并且每当第三方程序收到新消息时它都会重新写入xml文件。我想要做的是找到一种方法来读取相关的flashvars(如果这是正确的术语)到一个flash文件中(基本上我想读取消息1 - 6),忽略xml的其余部分,显示消息,然后每隔30秒重新加载xml(以防发生更改)。我想这很像新闻阅读器,但我没有任何控制xml文件的结构,所以如果有人能指出我正确的方向,那么我很高兴有一个去学习。我曾尝试搞乱我下载的基本新闻阅读器flash文件,但它似乎不喜欢xml - 我猜是因为xml中的每个消息都有自己的编号?一如既往的帮助,非常感谢。

谢谢,

Rob。

<?xml version="1.0" encoding="iso-8859-1"?> 
<messagemonitor> 

<messages> 

<message1> 
    <user></user> 
    <gender></gender> 
    <genderimagepath>C:/Program Files/monitor/monitorV3/Conf/Emoticons/blankgender.gif</genderimagepath> 
    <msg>Send your Messages to 07654 321 123</msg> 
</message1> 

<message2> 
    <user></user> 
    <gender></gender> 
    <genderimagepath>C:/Program Files/monitor/monitorV3/Conf/Emoticons/blankgender.gif</genderimagepath> 
    <msg>Send your Messages to 07654 321 123</msg> 
</message2> 

<message3> 
    <user></user> 
    <gender></gender> 
    <genderimagepath>C:/Program Files/monitor/monitorV3/Conf/Emoticons/blankgender.gif</genderimagepath> 
    <msg>Send your Messages to 07654 321 123</msg> 
</message3> 

<message4> 
    <user></user> 
    <gender></gender> 
    <genderimagepath>C:/Program Files/monitor/monitorV3/Conf/Emoticons/blankgender.gif</genderimagepath> 
    <msg>Send your Messages to 07654 321 123</msg> 
</message4> 

<message5> 
    <user></user> 
    <gender></gender> 
    <genderimagepath>C:/Program Files/monitor/monitorV3/Conf/Emoticons/blankgender.gif</genderimagepath> 
    <msg>Send your Messages to 07654 321 123</msg> 
</message5> 

<message6> 
    <user></user> 
    <gender></gender> 
    <genderimagepath>C:/Program Files/monitor/monitorV3/Conf/Emoticons/blankgender.gif</genderimagepath> 
    <msg>Send your Messages to 07654 321 123</msg> 
</message6> 
</messages> 

<votes> 
<question></question> 
<answera></answera> 
<answerb></answerb> 
<answerc></answerc> 
<answerd></answerd> 
<answere></answere> 
<answerf></answerf> 

<votepercenta></votepercenta> 
<votepercentb></votepercentb> 
<votepercentc></votepercentc> 
<votepercentd></votepercentd> 
<votepercente></votepercente> 
<votepercentf></votepercentf> 

<votepercentnuma></votepercentnuma> 
<votepercentnumb></votepercentnumb> 
<votepercentnumc></votepercentnumc> 
<votepercentnumd></votepercentnumd> 
<votepercentnume></votepercentnume> 
<votepercentnumf></votepercentnumf> 

<pica>C:/Program Files (x86)/monitor/Monitor V3/Conf/Emoticons/blankgender.gif</pica> 
<picb>C:/Program Files (x86)/monitor/Monitor V3/Conf/Emoticons/blankgender.gif</picb> 
<picc>C:/Program Files (x86)/monitor/Monitor V3/Conf/Emoticons/blankgender.gif</picc> 
<picd>C:/Program Files (x86)/monitor/Monitor V3/Conf/Emoticons/blankgender.gif</picd> 
</votes> 

<photos> 
<flashmovie></flashmovie> 
<picturecaption></picturecaption> 
<picturefile></picturefile> 
<slideshowfile></slideshowfile> 
<combiphotofile></combiphotofile> 
</photos> 

<systeminfo> 
<number>07654 321 123</number> 
<systemname>CHEESEY</systemname> 
<sendmessage>Send your Messages to 07654 321 123</sendmessage> 
<sendvotemsg>Send your Selection to 07654 321 123</sendvotemsg>  
<agreement>By using this system you agree to receive offers/promotions via SMS from the operator or selected 3rd parties</agreement> 
</systeminfo> 

</messagemonitor> 

回答

3

下应作为通过正则表达式匹配的通用节点选择的示例。它假定加载的数据是xml,否则会发生解析错误。请注意,这个代码仅仅是一个功能性的例子。

以下XML用作本实施例中的基础:

<root> 
    <tag1>1</tag1> 
    <tag2>2</tag2> 
    <tag3>3</tag3> 

    <misc>?</misc> 
</root> 

下面的代码将加载和基于所期望的节点上解析:

var loader:URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, function(event:Event):void 
{ 
    var xml:XML = new XML(loader.data); 
    var messages:XMLList = xml.*.(/^tag/.test(name())); 

    trace(messages.toXMLString()); 

    // <tag1>1</tag1> 
    // <tag2>2</tag2> 
    // <tag3>3</tag3> 
}); 

loader.load(new URLRequest("path_to_xml")); 

希望这应该摆脱一些洞察E4X ,因为使用正则表达式来匹配节点名称的例子并不多。

祝你好运!

0

假设你的服务名为xml一个XML变量被加载,你会遍历的xml.messages孩子:

var xml:XML; // loaded XML per your cited example. 

for each (var messageXml:XML in xml.messages.children()) 
{ 
    trace("User: " + messageXml..user.toString()); 
    trace("Gender: " + messageXml..gender.toString()); 
    // etc... 
}