その他
    ホーム 技術発信 DoRuby Ruby on RailsとFlash(ActionScript)のXML連携

    Ruby on RailsとFlash(ActionScript)のXML連携

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    二回目の記事投稿となります。新人エンジニアの はる です。

    Ruby on RailsとFlashの連携方法はいくつかありますが、
    今回は、Ruby on RailsとFlash(ActionScript)のXML連携について書いてみたいと思います。

    Rails側とFlash側の作業は、

    [Rails]REXMLを使用してxmlを生成する。
    [Flash]XML.loadメソッドを使用して、xmlを読み込む。
    

    となります。

    [Rails]

    XMLを生成するためにREXMLを使用します。

    REXMLについては脆弱性が発表がされておりますので、本サイト内の記事

    REXMLの脆弱性」を参照し、脆弱性対策を行ってから使用して下さい。

    まず、Rails側でXMLを生成します。

    #Rails XML生成メソッド

    def get_xml
      xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><data />\n"
      doc = REXML::Document.new( xmlString )
      #items
      items = REXML::Element.new("items", doc.root)
      i = 0
      10.times do
        item = REXML::Element.new("item", items)
        title = REXML::Element.new("title", item)
        title.text = "タイトル#{i}"
        value = REXML::Element.new("value", item)
        value.text = "hoge#{i}"
        i += 1
      end
      send_data doc.to_s, :type => 'text/xml', :filename => 'doruby.xml'
    end
    

    #doruby.xml

    <?xml version='1.0' encoding='UTF-8'?>
    <data>
    <items>
      <item>
        <title>タイトル0</title>
        <value>hoge0</value>
      </item>
      <item>
        <title>タイトル1</title>
        <value>hoge1</value>
      </item>
      <item>
        <title>タイトル2</title>
        <value>hoge2</value>
      </item>
    
      ・・・(中略)・・・
    
      <item>
        <title>タイトル9</title>
        <value>hoge9</value>
      </item>
    </items>
    </data>
    

    Rails側でのXML生成の作業は以上です。

    次にFlash側でXMLを読み込みます。

    [Flash(ActionScript)]

    loadData(http://localhost:3000/"controller名"/get_xml);
    //loadData("doruby.xml");
    
    function loadData(filename) {
      xmlData = new XML();
      xmlData.ignoreWhite = true;
      xmlData.onLoad = loadingDone;
      xmlData.load(filename);
    }
    
    function loadingDone() {
      getData(xmlData);
      _root.nextFrame();
    }
    
    function getData(node) {
      items = node.firstChild.childNodes[0];
      _root._items = new Array();
    
      for (var i = 0; i<items.childNodes.length; i++) {
        _root._items[i] = new Object();
        for (var j = 0; j<items.childNodes[i].childNodes.length; j++) {
          node = items.childNodes[i].childNodes[j];
          if (node.nodeName == "title") {
            _root._items[i].title = node.firstChild;
          } else if (node.nodeName == "value") {
            _root._items[i].value = node.firstChild;
          }
        }
      }
    }
    

    _root._items[i].titleにアイテムのタイトル、_root._items[i].valueにアイテムの値を格納しています。

    きちんと読み込まれているかどうか確認するには

    下記のtraceアクション等でFlashの出力ウィンドウ上から確認できます。

    for (var i = 0; i<_root._items.length; i++) {
      trace("_root._items["+i+"].title = "+_root._items[i].title);
      trace("_root._items["+i+"].value = "+_root._items[i].value);
    }
    

    以上、Ruby on RailsとFlash(ActionAcript)のXML連携について、ご紹介させていただきました。

    次回は、Flash(ActionAcript)の”LoadVars.sendAndLoadメソッド”を使用した

    Ruby on RailsとFlashの連携について書きたいと思います。

    記事を共有
    モバイルバージョンを終了