【发布时间】:2011-12-22 18:53:21
【问题描述】:
我需要使用 XDocument 加载 xml 的帮助。 xml 保存 WPF 中 HierarchicalDataTemplate 的数据,因此每个元素都具有相同的属性。
我遇到了一个新手问题,如何处理重复的属性名称、图像和文件位置。
我试图让下面的代码工作,但正如你所见,重复的属性将不起作用。
public static List<MenuItem> Load(string MyMenuFile)
{
var mymenu = XDocument.Load(MyMenuFile).Root.Elements("Menu").Select(
x => new MenuItem(
(string)x.Attribute("id"),
(string)x.Attribute("name"),
(string)x.Attribute("image"),
(string)x.Attribute("fileLoc"),
(string)x.Element("itemlist"),
(string)x.Attribute("name"),
(string)x.Attribute("image"),
(string)x.Attribute("fileLoc"),
(string)x.Element("item"),
(string)x.Attribute("name"),
(string)x.Attribute("image"),
(string)x.Attribute("fileLoc")));
return stationfiles.ToList();
}
这里是xml:
<Menus>
<Menu id="1" Name="Level1" image="C:\lvl1.jpg" fileLoc="C:\lvl1.xml">
</Menu>
<Menu id="2" Name="Level2" image="C:\lvl2.jpg" >
<itemlist Name="Level2" image="C:\lvl2.jpg" fileLoc="C:\lvl2.xml">
</itemlist>
<itemlist Name="Level3" image="C:\lvl3.jpg">
<item Name="First" image="C:\first.jpg" fileLoc="C:\first.xml"></item>
<item Name="Second" image="C:\second.jpg" fileLoc="C:\second.xml"></item>
<item Name="Third" image="C:\third.jpg" fileLoc="C:\third.xml"></item>
</itemlist>
</Menu>
</Menus>
如您所见,不同的元素但重复的属性。我应该有 3 个单独的类,但我将如何将它们组合为 XDocument 负载?任何帮助都会很棒。
【问题讨论】:
-
我对@987654326@、
<itemlist>和item都应该是MenuItem的理解是否正确?我是否正确<itemlist>也可以有<itemlist>?还是停在<item>级别? -
我明白你的意思了,根是Menus,下一个元素是带有属性的菜单,下一个是带有属性的itemlist(可选),下一个是带有属性的item(也是可选的)在上面的xml中, Menu id=1 没有 itemlist 或 item,Menu id=2 有两个 itemlist 但只有第二个有 item。一个项目列表将只有属性和项目。
标签: c# wpf xml linq-to-xml