2016-11-07 15 views
0

私はGoogleニュースサイトマップフィードを持っていますが、C#リストコレクションのxmlを逆シリアル化できません。Googleニュースサイトマップフィードを逆シリアル化するにはどうすればよいですか?

私のフィードから最初の50アイテムを取得します。

どうすればいいですか?何か案が ?おかげ

マイXMLサンプルはこれです:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="http://www.hellenicshippingnews.com/wp-content/plugins/xml-sitemap-feed/includes/xsl/sitemap-news.xsl?ver=4.7.3"?> 
<!-- generated-on="2016-11-07T12:40:55+00:00" --> 
<!-- generator="XML & Google News Sitemap Feed plugin for WordPress" --> 
<!-- generator-url="http://status301.net/wordpress-plugins/xml-sitemap-feed/" --> 
<!-- generator-version="4.7.3" --> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" 
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
    http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd 
    http://www.google.com/schemas/sitemap-news/0.9 
    http://www.google.com/schemas/sitemap-news/0.9/sitemap-news.xsd 
    http://www.google.com/schemas/sitemap-image/1.1 
    http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd"> 
<url> 
    <loc>http://www.hellenicshippingnews.com/odc-to-convert-fifth-greek-vessel-olympic-target/</loc> 
    <news:news> 
     <news:publication> 
      <news:name>Hellenic Shipping News Worldwide</news:name> 
      <news:language>en</news:language> 
     </news:publication> 
     <news:publication_date>2016-11-07T10:00:57+00:00</news:publication_date> 
     <news:title>ODC to convert fifth Greek vessel Olympic Target</news:title> 
     <news:keywords>Hellenic Shipping News, ΒunkerportsnewsΠρώτηΣελιδα, Πρώτη σελιδα</news:keywords> 
    </news:news> 
    <image:image> 
     <image:loc>http://www.hellenicshippingnews.com/wp-content/uploads/2015/10/double-hulled_oil_tanker.jpg</image:loc> 
     <image:title><![CDATA[double-hulled_oil_tanker]]></image:title> 
    </image:image> 
</url> 
</urlset> 

私はこのC#のコードを試すが、何も起こらなかっ:名前空間について忘れている

XDocument feedXML = XDocument.Load("http://www.hellenicshippingnews.com/sitemap-news.xml"); 

     var feeds = from feed in feedXML.Descendants("url") 
        select new 
        { 
         Title = feed.Element("loc").Value, 
         Link = feed.Element("news:title").Value, 
         Description = feed.Element("news:keywords").Value 
        }; 
+2

*何も起こっていないとはどういう意味ですか?より具体的にしてください。実行時例外がスローされますか? LINQは空の結果を返しますか? –

+0

.Descendants( "url")にsomethindが見つかりません –

答えて

1

(周りurlsetルート要素属性xmlnsそれらを参照します)。

また、あなたの代わりにElement

以下の太字でノートを参照してくださいのDescendantsメソッドを使用する必要があります。ドキュメント毎の

Element

(ドキュメント順に)最初に取得します。子要素は、指定されたXNameを持ちます。

そして、Descendants

はドキュメント順に、このドキュメントまたは要素の子孫要素のコレクションを返します。

子要素は、親要素の直接の内部ノードと見なされます。 titlekeywordsは、子ノードではないurlなので、Descendantsメソッドを使用して、ノード階層をより深く検索する必要があります。

string ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; 
string news_ns = "http://www.google.com/schemas/sitemap-news/0.9"; 
var feeds = from feed in feedXML.Descendants(String.Format("{{{0}}}{1}", ns, "url")) 
      select new 
      { 
       Title = feed.Element(String.Format("{{{0}}}{1}", ns, "loc")).Value, 
       Link = feed.Descendants(String.Format("{{{0}}}{1}", news_ns, "title")).Single().Value, 
       Description = feed.Descendants(String.Format("{{{0}}}{1}", news_ns, "keywords")).Single().Value 
      }; 
+0

うわー!!ありがとう、私は完全にあなたのコードを理解することはできませんが、それは働いている! どうすれば取得できますか?image:loc value ?? –

+0

@ G.Mich 'publication_date'は' title'と 'keywords'の同じパターンに従ってください。 'image:title'の場合、' http:// www.google.com/schemas/sitemap-image/1.1' **の 'image'名前空間を探す必要があります(' urlset'要素を見てください。そこにすべての名前空間を見つけることができます)**。 'title'と' keyword'と同じパターンに従いますが、異なる名前空間を渡します。あなたの場合は、 'image_ns'です。 –

+0

ありがとうございました!!!! –

関連する問題