ハマった。
LINQ to XMLのサンプルコードとしてRSSフィードリーダが作られていたので、ではそのコードでATOMフィードを読んでみようとしてみると、フィードの内容が一切取り出せない。
おかしいなぁ、と2日間情報を探し回ったあげく、ようやっと「MSの想定する処理方法」のひとつが見つかった。
RSSのコードのまま取り出せなかった理由は、ATOMフィードがデフォルトネームスペースを設定しているためだった。LINQはXPathを理解するのだが、XPathの仕様としてXML要素を取り出す際には、デフォルトネームスペース内の要素でさえ、いちいちネームスペースを指定せねばならない様子。
結果、LINQ to XMLでは次のようなコードになる。
XDocument doc = XDocument.Load(@"http://satoshi.blogs.com/life/atom.xml");
XNamespace nsDef = "http://www.w3.org/2005/Atom";
var feeds = from feed in doc.Descendants(nsDef + "entry")
select new {
[...]
Visual Studio 8.0 β2からSilverlightアプリケーションをする方法として一番簡単なものは、Silverlightプロジェクトをアクティブにしてデバッグ実行すること。Silverlightアプリケーション作成ウィザードで生成されたテストページをてブラウザがローカルファイルとして読み込み、ブラウザとデバッガが通信してデバッグできる。
しかし、BrowserHttpWebRequestクラスで通信しようとすると問題が起きる。クロスサイトスプリクティング防止のため、ローカルファイルとして読み込まれたページから同クラスを用いた通信はできないよう制限されているので、正常ロジックを通すことができない。
そこで、テストページをローカルファイルとしてではなくHTTP通信経路で取得するようにして、そのページをデバッガで追うための手順をwebで探した。
ところが本家の手順を踏んでもまっさらなページが表示されるだけでデバッグできない。他の情報を当たってもテキトーな方法を書いたものしかみつからない(“ここ”など)。困ってるのは自分だけなのなぁ、と試行錯誤と情報の断片の掻き集めとを続けて、ようやくそれらしい方法がわかった。
使用したもの
(以下は http://silverlight.org/GetStarted/ からリンクが張られている)
Visual Studio 2008 β2
Silverlight 1.1 Alpha Refresh
Microsoft ASP.NET Futures (July 2007)
Microsoft Silverlight Tools Alpha Refresh for Visual Studio (July 2007)
デバッグ手順
Visual StudioでSilverlightプロジェクトを含むソリューションを開く
ソリューションエクスプローラで、ソリューション項目を右クリックして、[Add] – [New Project...]を選択
ASP.Net AJAX Features Web Applicationプロジェクトを作成
ソリューションエクスプローラで、作成した ASP.NET プロジェクト項目を右クリックして、コンテキストメニューから Add Silverlight Link を選択
確認ダイアログで OK をクリック
default.aspx をダブルクリックしてコードをエディタに表示させる
<body>開始タグに続けて次のコードを追加
<asp:Xaml runat="server" XamlUrl="~/Page.xaml" [...]