ホーム 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の連携について書きたいと思います。

記事を共有

最近人気な記事