2012-02-20 9 views
0

は、私は、静的読みAtomフィードの別のテストでは、私は私がリンクのリストを参照してくださいブラウザでそのリンクを開くと

IList<Item> ParseAtom(string url) 
    { 
     try 
     { 
      XDocument doc = XDocument.Load(url); 

      // Feed/Entry 
      var entries = from item in doc.Root.Elements().Where(i => i.Name.LocalName == "entry") 
          select new Item 
          { 
           FeedType = FeedType.Atom, 
           Content = item.Elements().First(i => i.Name.LocalName == "content").Value, 
           Link = item.Elements().First(i => i.Name.LocalName == "link").Attribute("href").Value, 
           PublishDate = ParseDate(item.Elements().First(i => i.Name.LocalName == "published").Value), 
           Title = item.Elements().First(i => i.Name.LocalName == "title").Value 
          }; 

      return entries.ToList(); 
     } 
     catch 
     { 
      return new List<Item>(); 
     } 
    } 

私は次のリンク http://localhost/posts.atom/

を使用しています公共この機能を使用しています失敗します各投稿アイテムに私を誘導します。

  1. 1リンク2リンク3リンク4リンク

が、私が解析し、URLとしてそれを使用するとき、私は、私のプログラムは、何も返しません。上記のリンクが実際に何を意味するのか分かりません。私は本当にあなたに原子のフィードのsomemoreの説明を提供するためにあなたの助けが必要です、ありがとうございました。

XMLは、私は強く容疑例外がスローされ

<Root> 
    <Child id=123456> 
    <Child1>Child1 
    </Child1> 
    <Child2>Child2 
    </Child2> 
    </Child> 
</Root> 
+0

フィードがどのように見えるのかわからなくても、私たちは多くを助けることはできません。ローカルホストのリンクを指定したことは明らかです。これは明らかにマシン上でのみ動作します。指定された名前の要素を見つけるのは非常にうまくいかないことに注意してください。 'XNamespace'とローカル名から正しい名前を作成した' Element(XName) 'を使うべきです。 –

+0

'フィードがどのように見えるのか 'それはどういう意味ですか?あなたは私に例を説明したり提供したりできますか? – Mikhail

+0

XML - あなたの質問にいくつかのサンプルXMLを入れてください。 –

答えて

2

次の形式のように、ストリームとして保存されている他のファイルで作成された - しかし、あなたはあなたのために言うことができません」 すべて例外の内容を記録せずに空のリストを返すか、のいずれかの診断の種類を返します。私は個人的にtry/catchを完全に削除します:もし何かが間違っていたら、なぜそれを隠すのですか? にする必要がある場合は、例外をキャッチし、の特定の例外をキャッチし、何が起きたかを知るためにログに記録します。

あなたのクエリがあまりにも、大幅に簡略化することができます。これは今、それらの要素が存在しない場合はnullにコンテンツとタイトルを設定することを

XDocument doc = XDocument.Load("atom.xml"); 
XNamespace ns = "http://www.w3.org/2005/Atom"; 

var entries = doc.Root 
       .Elements(ns + "entry") 
       .Select(item => new Item 
       { 
         FeedType = FeedType.Atom, 
         Content = (string) item.Element(ns + "content"), 
         Link = (string) item.Element(ns + "link").Attribute("href"), 
         PublishDate = (DateTime) item.Element(ns + "published"), 
         Title = (string) item.Element(ns + "title") 
        }; 

注意。むしろ例外を投げたければ.Valueを再び使用するように変更してください。 PublishDateについても、DateTimeの代わりにDateTime?にキャストして同じ動作をさせることができます。これは明らかにプロパティのタイプも変更した後です。欠席しているリンクを扱うのは少し難しくなりますが、あまりにも悪くはありません。

基本的には、それは不在要素だと思われます。おそらくpublishedです。ただし、例外をログに記録する(またはキャッチしない)場合は、簡単に見つけることができます。

EDIT:あなたのコメントを考えれば、XMLを扱う方法とはまったく関係がないように思えます。 XMLを問題の原因としています。嚥下ていない例外が重要であるこれは

は私がXDocument.Load経由でXMLを読み込むときに資格情報を提供するために、どのような方法を知らない...です - あなたも、その後でそれを解析し、データをフェッチするWebRequestまたはWebClientを使用する必要がありますXDocument.Load(Stream)

+0

ありがとうございますが、リモートサーバーに接続できないという例外があります。実際に私のサーバは、ユーザがグリッドビューのデータを見る前にログインするための認証(パスワードとユーザ名)が必要です。私はコード内のどこに私のユーザー名と私のパスワードを入れなければならないのか分かりません。あなたが私にこれについてのより多くのヒントを提供してくれれば、ありがとう。 – Mikhail

+0

@Mikhail:そうです。* XML解析とは何も関係ありません。私の編集を参照してください。 –

+0

いいえ、助けました。私が見逃したファイル拡張子。上記のURL + '。xml'であったはずです。上記のコードはデータを読み取る可能性がありますが、接続の問題が発生するとわかりません。これについてもっと教えていただければ幸いです。 – Mikhail

関連する問題