0

loc 要素に基づいて、Google サイトマップで重複を見つけたいです。

サンプル XML:

<?xml version="1.0" encoding="UTF-8"?>
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xsi:s chemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  <url><loc>http://mysite.net/Members.aspx</loc><lastmod>2011-07-01</lastmod></url>      
  <url><loc>http://mysite.net/Topics.aspx</loc><lastmod>2011-05-27</lastmod></url>
  <url><loc>http://mysite.net/Members.aspx</loc><lastmod>2011-07-02</lastmod></url>      
</urlset>

サンプル LINQ:

            var duplicates = (from req in doc.Descendants("urlset")
                          group req by req.Descendants("//loc").First().Value
                              into g
                              where g.Count() > 1
                          select g.Skip(1)).SelectMany(elements => elements
                        );

重複が空を返すのはなぜですか?

4

2 に答える 2

0

doc.Descendants("urlset")1つの要素()のみを返し<urlset>ます。

<url>要素を選択する必要があります。

from u in doc.Descendants("url")
group u by u.Element("loc").Value into g
from elem in g.Skip(1)    //This is the SelectMany()
select elem
于 2012-05-14T15:17:48.330 に答える
0

名前空間を指定しなかったため、クエリは要素を見つけられません。また、必要以上に複雑です。

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
var duplicates =
    from loc in doc.Root.Elements(ns + "url").Elements(ns + "loc")
    group loc by loc.Value into g
    where g.Count() > 1
    select g.Key;
于 2012-05-14T15:18:48.890 に答える