8 月 28 2007
デフォルトXML名前空間の件
仕事で詰まって、徹夜。 イライラしたので、AIRでなんか作ろうと思った。 今も反省してない。
で、ですね。AIRで何か作るうんぬん以前の問題で行き詰まる。 仕事に行き詰まり、趣味に行き詰まり、 行き詰まってばかりだな。。
AIRを使って、はてなのRSSを取得して、どーこーしようと思ったのだけれど EX4を使って、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で操作できない。 これで数時間詰まる。
で、以下のようにして解決
<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/"にしているんだな。
試しにこうしてみたら、普通に通る。
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のブックマーク