1
<channel>
        <title>Best Web Gallery - Flash + CSS Gallery</title>
        <link>http://bestwebgallery.com</link>
        <description>Featuring the world best web design</description>
        <pubDate>09 Dec 2009</pubDate>    
        <generator>http://wordpress.org/?v=2.3.2</generator>
        <language>en</language>
</channel>   


<channel>
        <title>Best Web Gallery - Flash + CSS Gallery</title>
        <link>http://bestwebgallery.com</link>
        <description>Featuring the world best web design</description>

            // pubDate missing

        <generator>http://wordpress.org/?v=2.3.2</generator>
        <language>en</language>
</channel>




   XDocument rssFeed = XDocument.Load(url);

                    var feedResources = from details in rssFeed.Descendants("channel")
                                    select new feedResource
                                    {
                                         Title = details.Element("title").Value,
                                         Host = details.Element("link").Value,
                                         Description = details.Element("description").Value,  

                                         PublishedOn = DateTime.Parse(details.Element("pubDate").Value), 
                                         Generator = details.Element("generator").Value,
                                         Language = details.Element("language").Value
                                    };

要素「pubDate」などを取得しようとする前に、ここで確認するにはどうすればよいですか? チェックしないと、null 参照例外がスローされるためです。

4

3 に答える 3

3

などは使用しないでくださいParse。xml は通常、受け入れられるものとは異なる文字列表現を使用します。キャストするだけです(いいえに注意してください.Value):

select new FeedResource
{
    Title = (string)details.Element("title"),
    Host = (string)details.Element("link"),
    Description = (string)details.Element("description"),
    PublishedOn = (DateTime?)details.Element("pubDate"),
    Generator = (string)details.Element("generator"),
    Language = (string)details.Element("language")
}

XElementすべての作業を行う変換演算子があり、適切な値を返します。

于 2009-12-09T20:42:26.277 に答える
2

私の個人的な好みは、XElement に 2 つの拡張メソッドを追加することです。

public static string ValueOrDefault(this XElement xml)
{
    if (xml == null) return null;   // or String.Empty, if you prefer
    return xml.Value
}

public static string ValueOrDefault(this XElement xml, string defaultValue)
{
    if (xml == null) return defaultValue;
    return xml.Value
}

コードは次のようになります。

select new feedResource
{
     Title = details.Element("title").ValueOrDefault(),
     Host = details.Element("link").ValueOrDefault(),
     Description = details.Element("description").ValueOrDefault(),  

     PublishedOn = DateTime.Parse(details.Element("pubDate").ValueOrDefault(DateTime.Now.ToString())), 
     Generator = details.Element("generator").ValueOrDefault(),
     Language = details.Element("language").ValueOrDefault()
};
于 2009-12-09T20:42:20.047 に答える
-1

行を変更するだけです:

PublishedOn = DateTime.Parse(details.Element("pubDate").Value),

為に:

PublishedOn = details.Element("pubDate") != null? DateTime.Parse(details.Element("pubDate").Value) : DateTime.Now,

必要に応じて DateTime.Now を変更できます

于 2009-12-09T20:46:31.677 に答える