在Linq中选择xml模式检索重复的结果

时间:2015-04-23 11:59:05

标签: c# linq

我正在通过Linq查找此XML字符串中url属性包含'.jpg'的每个标记'文件',只有一个'file'标记,但我检索了许多重复的元素

enter image description here

我的查询有什么问题?

string p = "<root><item itemid=\"1\" text=\"Club logo\" name=\"Item1\" mandatory=\"false\" selectionmode=\"single\" isGuidelinesEnabled=\"true\" description=\"VOBM - Enter abbreviated Club Name (e.g. Milan) and 2, 3 or 4 letter abbreviation (e.g. ACM)\"><objects><TextBox name=\"TextArea1\" " +
                  "mandatory=\"true\"><text>&lt;p&gt;test &lt;/p&gt;</text></TextBox><Attachment name=\"Attachment1\" mandatory=\"false\" " +
                  "templatekey=\"XIS.Fbs.Stadium.SiteVisit.Template.Picture1\">" +
                  "<TemplateContent>&lt;p&gt;&lt;span&gt;%%Text&lt;/span&gt;&lt;/p&gt; &lt;table style=\"border: currentColor; border-collapse: collapse;\" border=\"1\" cellpadding=\"0\" " +
                  "cellspacing=\"0\"&gt; &lt;tbody&gt;&lt;tr style=\"height: 27.8pt;\"&gt; &lt;td style=\"padding: 0cm; border: 1pt solid black; width: 226.25pt; height: 27.8pt;\" valign=\"top\" " +
                  "width=\"302\"&gt; &lt;p style=\"text-align: center;\" align=\"center\"&gt;&lt;span&gt;&lt;img style=\"width: 267px; height: 191px;\" alt=\"Picture_Missing.jpg\" " +
                  "src=\"/Repository/General/43/2/5/0/0/7/1/1/9/0/30.png\"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style=\"text-align: center; page-break-after: avoid;\" align=\"center\"&gt;&lt;span " +
                  "class=\"PictureCaption\"&gt;&lt;span style=\"font-size: 9pt;\"&gt;%%PictureCaption&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; " +
                  "&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</TemplateContent><file url=\"/Repository/Upload/SiteVisit/Report/204965/image (26).jpg\" name=\"image (26)\" /></Attachment></objects></item></root>";

      var doc = XDocument.Parse(p);
      var pp = p.Select(x => doc.Descendants("file").Where(y => y.Attribute("url").Value.Contains(".jpg"))).Distinct().ToList();


      foreach (var i in pp)
      {
        Console.WriteLine(i);
      }

2 个答案:

答案 0 :(得分:2)

看起来p.Select在这里是多余的:

var pp = p.Select(x => doc.Descendants("file").Where(y => y.Attribute("url").Value.Contains(".jpg")))
         .Distinct()
         .ToList();

换句话说,它应该很简单

var pp = doc.Descendants("file")
            .Where(y => y.Attribute("url").Value.Contains(".jpg"))
            .Distinct()
            .ToList();

答案 1 :(得分:2)

你为什么要搜索p。通过文档列举。

var pp = doc.Descendants("file").Where(y => y.Attribute("url").Value.Contains(".jpg")).Distinct().ToList();