public void LoadXmlData <T>(ResourceID resID) where T : XmlBaseData { string typeKey = GetDataListsKey <T>(); if (m_XmlConfigDataLists.ContainsKey(typeKey)) { Debug.LogWarning("duplicated key in config: " + typeKey); return; } List <T> result = ParseXml <T>(resID); if (result != null) { List <XmlBaseData> list = new List <XmlBaseData>(); for (int i = 0; i < result.Count; i++) { XmlBaseData item = result[i]; list.Add(item); string pKey = item.GetPrimaryKey(); if (string.IsNullOrEmpty(pKey) == false) { string itemKey = GetDataItemKey <T>(pKey); if (m_XmlConfigDataItemss.ContainsKey(itemKey) == false) { m_XmlConfigDataItemss.Add(itemKey, item); } else { Debug.Log("duplicate item key: " + itemKey); } } } m_XmlConfigDataLists.Add(typeKey, list); } }
public static List <T> ParseXml <T>(string filepath) where T : XmlBaseData { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); T obj = (T)Activator.CreateInstance(typeof(T)); XmlNodeList nodeList = xmlDoc.SelectSingleNode(XmlBaseData.GetRootName()).ChildNodes; List <T> result = new List <T>(); foreach (XmlElement xe in nodeList) { obj.ParseXmlData(xe); } result.Add(obj); return(result); }