我无法弄清楚为什么我的代码只是采用第一个标记而不是其余标记。
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只是一个带有公共字符串的get set 当我写出这些数据时,我使用了一个转发器 感谢您的帮助:)
答案 0 :(得分:8)
这是因为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,
};
答案 1 :(得分:0)
<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>
答案 2 :(得分:0)
尝试使用XElement.Load()而不是XDocument.Load()