2

以下のようなxmlがあります。タイトルは読めますが、media:contentのURLにアクセスできません。助言がありますか?私の動作していないc#は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を取得する方法がわかりません(期待どおりにアイテムごとの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();
    
4

3 に答える 3

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();
于 2012-11-04T22:33:32.367 に答える
1

名前空間が間違っています...

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

する必要があります

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

そして、名前空間と要素名を誤って組み合わせています

...
Urls = data.Elements(xmlns + "group")
....
于 2012-11-04T22:31:57.117 に答える
1

mediaは名前空間エイリアスであり、要素ではありません。

名前空間group内の要素を取得する必要があります。http://search.yahoo.com/mrss/

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


let xElementUrls = data.Element(m + "group")
于 2012-11-04T22:19:36.730 に答える