读取XML数据的问题
- XML code
<?xml version="1.0" encoding="utf-8" ?><Items> <MenuItem Text="分类"> <MenuItem Text="瓷器" IsEnabled="false"/> <MenuItem Text="青铜器" IsEnabled="false"/> <MenuItem Text="玉器"/> <MenuItem Text="陶器"/> </MenuItem> <MenuItem Text="年代"> <MenuItem Text="西周"/> <MenuItem Text="汉代"/> <MenuItem Text="唐代"/> <MenuItem Text="宋代" IsEnabled="false"/> <MenuItem Text="元代"/> <MenuItem Text="明代"/> <MenuItem Text="清代" IsEnabled="false"/> </MenuItem></Items>
- C# code
public class MenuItem { private bool isEnabled = true; private string text; private List<MenuItem> children; public string Text { get { return this.text; } set { this.text = value; } } public bool IsEnabled { get { return this.isEnabled; } set { this.isEnabled = value; } } public List<MenuItem> Children { get { return this.children; } set { this.children = value; } } }我用的是WebClient的OpenReadAsync方法
- C# code
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { List<MenuItem> mi = new List<MenuItem>(); MenuItem CurrentItem = null; XmlReader reader = XmlReader.Create(e.Result); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "MenuItem") { CurrentItem = new MenuItem(); ................ } } }我现在的问题是 不知道中间省略号那部分 该怎么写了 才能把上面的XML全部放到一个名叫mi的List<MenuItem>集合中
[解决办法]
搜一下linq to xml,很简单的
[解决办法]
如果子代的层次是无限的,使用递归,
如果子代的层次像楼主的例子中只有2层,硬编码也可以解决。
使用 LINQ to XML 或者 XML 都可以实现,推荐使用前者。
XElement root = XElement.Parse(e.Result);
[解决办法]
xml转换为对象 建议楼主使用 序列化,反序列化
很方便。
Silverlight中的对象序列化/反序列化
http://www.silverlightchina.net/html/tips/2010/0222/744.html
http://www.silverlightchina.net/html/tips/2010/0222/743.html
http://www.silverlightchina.net/html/tips/2010/0328/921.html
http://silverlightchina.net/html/developer/2009/1223/457.html