2012-11-04 107 views
2

我有xml,看起來像我在下面。我可以閱讀標題,但無法訪問媒體網址:內容。有什麼建議麼?我的非工作的c#與xml一起在下面。需要C#LINQ幫助閱讀XML

XNamespace xmlns = "http://www.w3.org/2005/Atom"; 
     var names = 
      (from data in   XDocument.Load("http://channel9.msdn.com/Events/Build/2012/rss").Descendants("item") 
      let xElement = data.Element("title") 
      let xElementUrls = data.Element("media") 
      where xElement != null 
      select new 
         { 
          Title = xElement.Value, 
          Urls = data.Elements(xmlns + "media:group") 
          //MediaGroup = data.Element("media:group") 
         }).ToList(); 

和XML:

<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?> 
    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 
     xmlns:atom="http://www.w3.org/2005/Atom" 
     xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" 
     xmlns:wfw="http://wellformedweb.org/CommentAPI/" 
     xmlns:slash="http://purl.org/rss/1.0/modules/slash/" 
     xmlns:media="http://search.yahoo.com/mrss/" 
     xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" 
     xmlns:c9="http://channel9.msdn.com"> 
    <channel> 

    <item> 
     <title>Building Windows 8 LOB Apps (Repeat)</title> 
     <media:group> 
      <media:content url="http://video.ch9.ms/sessions/build/2012/2-104R.mp4" 
      expression="full" duration="0" fileSize="1" type="video/mp4" medium="video"/> 
      <media:content url="http://video.ch9.ms/sessions/build/2012/2-104R.wmv" 
      expression="full" duration="0" fileSize="1" type="video/x-ms-wmv" medium="video"/> 
     </media:group> 
    </item> 
    <item> 
    <item> 
    ... 
    </item> 
  • 添加此基礎上LB的建議,但我無法弄清楚如何讓網址的出(現在是返回的URL列表預期每個項目。

    var items = xDoc.Descendants("item") 
        .Where(g => g.Element(media + "group") != null) 
        .Select(g => new { 
            Title = g.Element("title").Value, 
            Url = g.Element(media + "group") 
              .Element(media + "content") 
              .Attribute("url").Value 
            }) 
        .ToList(); 
    

回答

1

media是名稱空間別名,而不是元素。

您需要將http://search.yahoo.com/mrss/命名空間內得到group元素:

XNamespace m = "http://search.yahoo.com/mrss/"; 


let xElementUrls = data.Element(m + "group") 
+0

感謝您的所有幫助! –

1

你有錯誤的命名空間...

XNamespace xmlns = "http://www.w3.org/2005/Atom"; 

應該

XNamespace xmlns = "http://search.yahoo.com/mrss/"; 

而你錯誤地結合命名空間和元素名稱

... 
Urls = data.Elements(xmlns + "group") 
.... 
+0

我覺得我很接近。我仍然沒有得到多個網址,只有一個使用L.B的代碼。我已經改變它有一些有以下,現在我得到多個網址,但似乎無法拉開它來獲得我的url字符串值。 –

2
var xDoc = XDocument.Load("http://channel9.msdn.com/Events/Build/2012/rss"); 
XNamespace media = "http://search.yahoo.com/mrss/"; 

var items = xDoc.Descendants("item") 
      .Where(g => g.Element(media + "group") != null) 
      .Select(g => new { 
          Title = g.Element("title").Value, 
          Url = g.Element(media + "group") 
            .Element(media + "content") 
            .Attribute("url").Value 
          }) 
      .ToList();