Зачем брать только один? Linq to XML C # - PullRequest
1 голос
/ 24 августа 2009

Я не могу понять, почему мой код просто берет первый тег, а не остальные.

var xml = XDocument.Load(HttpContext.Current.Server.MapPath("~/App_Data/Themes.xml"));

var q = from f in xml.Descendants("themes")
        select new ThemesItem
        {
            Name = f.Element("theme").Element("name").Value,
            Description = f.Element("theme").Element("description").Value,
            Author = f.Element("theme").Element("author").Value,
        };

return q.ToList();

ThemeItem - просто набор с публичной строкой. Когда я записываю эти данные, я использую ретранслятор Спасибо за помощь:)

Ответы [ 3 ]

8 голосов
/ 24 августа 2009

Это связано с тем, что метод расширения Descendants принимает всех потомков узла xml, который называется "themes". Поскольку ваш узел тем является контейнером для отдельных тегов тем, есть только один, и когда вы берете элемент .Element, вы получаете первое вхождение.

Этот код должен работать:

var q = from f in xml.Descendants("theme")
        select new ThemesItem
        {
            Name = f.Element("name").Value,
            Description = f.Element("description").Value,
            Author = f.Element("author").Value,
        };
0 голосов
/ 24 августа 2009

Попробуйте использовать XElement.Load () вместо XDocument.Load ()

http://msdn.microsoft.com/en-us/library/bb675196.aspx

0 голосов
/ 24 августа 2009
<themes>
  <theme>
    <name>Standard</name>
    <description>standard theme</description>
    <author>User 1</author>
    <folder>standard</folder>
  </theme>
  <theme>
    <name>Standard</name>
    <description>standard theme</description>
    <author>User 2</author>
    <folder>standard</folder>
  </theme>
</themes>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...