我有一个xml文档:
<preferences>
<section name="PREF_SECTION_NAME_1">
<preference name="PREF_EXAMPLE_1" type="radio">
<default value="true"></default>
</preference>
<preference name="PREF_EXAMPLE_2" type="radio">
<default value="true"></default>
</preference>
<preference name="PREF_EXAMPLE_3" type="radio">
<default value="true"></default>
</preference>
</section>
<section name="PREF_SECTION_NAME_2">
<preference name="PREF_EXAMPLE_1" type="radio">
<default value="true"></default>
</preference>
<preference name="PREF_EXAMPLE_2" type="radio">
<default value="true"></default>
</preference>
<preference name="PREF_EXAMPLE_3" type="radio">
<default value="true"></default>
</preference>
</section>
</preferences>
我在课堂上代表了这一点:
public class Preference
{
public string Name { get; set; }
public bool Default { get; set; }
}
public class Section
{
public string Name { get; set; }
public List<Preference> Preference { get; set; }
}
public class Preferences
{
public List<Section> Section { get; set; }
}
我试图用我的C#方法加载它:
var xDoc = XDocument.Load("XMLFile.xml");
var sections = xDoc.Root
.Elements("Preferences")
.Select(x => new List<Section>
{
//what do I put in here?
})
.ToList();
似乎没有什么明显的东西//我在这里放什么?
我已经看到很多例子以这种方式加载非嵌套类。有没有办法做到这一点或??
感谢
答案 0 :(得分:2)
答案 1 :(得分:1)
您可能想要这样做。
var sections = xDoc.Root
.Descendants("section")
.Select(x => new Section
{
Name = x.Attribute("name").Value,
Preference = x.Elements("preference")
.Select(y=> new Preference
{
Name = (string)y.Attribute("name"),
Default = (bool)y.Element("default").Attribute("value")
})
.ToList()
})
.ToList()
现在可以使用下面创建您的(根)Preferences
实例。
var preferences = new Preferences {Section = sections };
选中此Demo
答案 2 :(得分:1)
var xDoc = XDocument.Load("sample1.xml");
var sections = xDoc.Root.Descendants("section")
.Select(x => new Section
{
Name = x.Attribute("name").Value,
Preference = GetPreference(x)
}).ToList();
private static List<Preference> GetPreference(XElement x)
{
return x.Descendants("preference").Select(y => new Preference
{
Name = y.Attribute("name").Value,
Default = ConvertToBool(y.Descendants("default").FirstOrDefault().Attribute("value").Value)
}).ToList();
}
private static bool ConvertToBool(string trueOrFalse)
{
return trueOrFalse == "true" ? true : false;
}
这应该有所帮助。