using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace Aitex.Core.UI.View.Frame { public class ViewItem { public string Id { get; set; } public string Name { get; set; } public string ViewClass { get; set; } public string ViewModelClass { get; set; } public bool IsSelected { get; set; } public List SubView { get; set; } public Dictionary GlobalName { get; set; } } class UILayoutParser { public ViewItem TitleView { get; private set; } public List NavigationView { get; private set; } public UILayoutParser(string xmlFile) { ParseLayout(xmlFile); } void ParseLayout(string xmlFile) { if (String.IsNullOrEmpty(xmlFile)) throw new ApplicationException("没有正确设置界面布局文件"); XmlDocument doc = new XmlDocument(); try { doc.Load(xmlFile); } catch (Exception ex) { throw new ApplicationException("不能解析界面布局文件"+xmlFile + " : " + ex.Message); } TitleView = ParseNode(doc.SelectSingleNode("/Aitex/Title")); foreach (XmlNode nav in doc.SelectNodes("/Aitex/Navigation")) { ViewItem menu = ParseNode(nav); if (menu == null) continue; foreach (XmlNode ele in nav.SelectNodes("SubView")) { if (menu.SubView == null) menu.SubView = new List(); ViewItem item = ParseNode(ele); if (item != null) menu.SubView.Add(item); } if (NavigationView == null) NavigationView = new List(); NavigationView.Add(menu); } } ViewItem ParseNode(XmlNode node) { if (node == null) return null; ViewItem item = new ViewItem(); item.GlobalName = new Dictionary(); if (node.Attributes["Id"] != null) item.Id = node.Attributes["Id"].Value; if (node.Attributes["Name"] != null) item.Name = node.Attributes["Name"].Value; if (node.Attributes["Name.en-US"] != null) item.GlobalName["en-US"] = node.Attributes["Name.en-US"].Value; if (node.Attributes["Name.zh-CN"] != null) item.GlobalName["zh-CN"] = node.Attributes["Name.zh-CN"].Value; if (node.Attributes["ViewClass"] != null) item.ViewClass = node.Attributes["ViewClass"].Value; if (node.Attributes["ViewModelClass"] != null) item.ViewModelClass = node.Attributes["ViewModelClass"].Value; return item; } } }