8 月 28 2007

デフォルトXML名前空間の件

Published by haga at 3:37 under actionscript3.0, flash, 日記

仕事で詰まって、徹夜。 イライラしたので、AIRでなんか作ろうと思った。 今も反省してない。

で、ですね。AIRで何か作るうんぬん以前の問題で行き詰まる。 仕事に行き詰まり、趣味に行き詰まり、 行き詰まってばかりだな。。

AIRを使って、はてなのRSSを取得して、どーこーしようと思ったのだけれど EX4を使って、XMLの操作すらできなかった。無念。

以下駄目な例:

var rss:XML =
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <channel>
    <title>zackleのブックマーク</title>
    <link>http://b.hatena.ne.jp/zackle</link>
    <description>zackleのブックマーク</description>
  </channel>
</rdf:RDF>
;

trace(rss.channel.title==null); // false
trace(rss.channel.title); //


rss.channel.titleは空ではないが、EX4で操作できない。 これで数時間詰まる。

で、以下のようにして解決

var rss:XML =
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <channel>
    <title>zackleのブックマーク</title>
    <link>http://b.hatena.ne.jp/zackle</link>
    <description>zackleのブックマーク</description>
  </channel>
</rdf:RDF>
;

// デフォルト名前空間を設定
default xml namespace = new Namespace("http://purl.org/rss/1.0/");

trace(rss.channel.title==null); // false
trace(rss.channel.title); // zackleのブックマーク


default xml namespace は、珍妙なシンタックスに見えるが、ここまでで1つのディレクティブらしい。 http://livedocs.adobe.com/flex/2_jp/langref/statements.html#default

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" の方に気を取られていたんだけれど 大事なのは xmlns="http://purl.org/rss/1.0/"

XMLに疎いのですが、恐らくデフォルトの名前空間を"http://purl.org/rss/1.0/"にしているんだな。

試しにこうしてみたら、普通に通る。

// ルートノードのxmlnsを削除してみる
var rss:XML =
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <channel>
    <title>zackleのブックマーク</title>
    <link>http://b.hatena.ne.jp/zackle</link>
    <description>zackleのブックマーク</description>
  </channel>
</rdf:RDF>
;

//default xml namespace = new Namespace("http://purl.org/rss/1.0/");

trace(rss.channel.title==null); // false
trace(rss.channel.title); // zackleのブックマーク


Trackback URI | Comments RSS

Leave a Reply