使用LINQ从XML中选择后代节点和元素

3

我有一个像这样的XML文件:

<BRPlugins>
  <Plugin name="aaaa">
      <summary>ssss</summary>
      <description>dddd</description>
      <category>cccc</category>
      <product>pppp</product>
      <gallery>
        <media type="picture" url="http://linktofolder/image.jpg">
        </media>
        <media type="picture" url="http://linktofolder/image.jpg">
        </media>
        <media type="video" url="http://linktofolder/video.avi">
        </media>
      </gallery>
      <Installers>
        <Release version="1234" status="production">
          <Installer url="http://linktofolder/installer1.exe"/>
          <Installer url="http://linktofolder/installer2.exe"/>
          <Installer url="http://linktofolder/installer3.exe"/>
        </Release>
        <Release version="4567" status="production">
          <Installer url="http://linktofolder/installer4.exe"/>
          <Installer url="http://linktofolder/installer5.exe"/>
          <Installer url="http://linktofolder/installer6.exe"/>/>
        </Release>
  </Plugin>
</Plugins>

我正在使用XDocument读取XML并创建HTML:
XDocument xmlDoc = XDocument.Load(Server.MapPath("Plugins.xml"));
foreach (XElement product in xmlDoc.Root.Nodes())
{
  counter++;
   div += "<div class='col-plugin-item alt" + counter + "'><a href='javascript:void(0)' class='name' id='box" + counter + "'>" + product.Attribute("name").Value + "</a></div>";
}
testediv.InnerHtml = div;

我需要能够从媒体和安装程序中获取元素“url”,从发布中获取版本和状态。 我尝试了以下方法,但无效:
var childElements = xmlDoc.Descendants("gallery").Elements("media");

foreach (XElement en in childElements)
{
  div += "Descendents: " + en.Attributes("url");
}
testediv.InnerHtml = div;

感谢您的询问!!!
1个回答

0
当您调用Attributes("url")时,即使只有一个元素,实际上也会创建一个集合。像这样的代码应该更好:

div += "Descendents: " + en.Attributes("url").First().Value;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接