private static GameShop ReadPriceList(string path) { XDocument xdoc = null; try { xdoc = XDocument.Load(path); } catch (XmlException) { } if (xdoc == null || xdoc.Root == null) return null; var xNameCategories = XName.Get("categories", DefaultNamespace); var xNameCategory = XName.Get("category", DefaultNamespace); var xNameItem = XName.Get("item", DefaultNamespace); var result = new GameShop(); var categoriesRoot = xdoc.Root.Element(xNameCategories); if (categoriesRoot == null) return null; foreach (var xcat in categoriesRoot.Elements(xNameCategory)) { var catAttr = xcat.Attribute("name"); if (catAttr == null || string.IsNullOrEmpty(catAttr.Value)) return null; var category = new ShopItemCollection(catAttr.Value.Trim()); foreach (var xitem in xcat.Elements(xNameItem)) { var idAttr = xitem.Attribute("id"); var titleAttr = xitem.Attribute("title"); var qualityAttr = xitem.Attribute("quality"); var raceAttr = xitem.Attribute("race"); var iconAttr = xitem.Attribute("icon"); var countAttr = xitem.Attribute("count"); var priceAttr = xitem.Attribute("price"); if (idAttr == null || string.IsNullOrEmpty(idAttr.Value)) continue; if (titleAttr == null || string.IsNullOrEmpty(titleAttr.Value)) continue; if (priceAttr == null || string.IsNullOrEmpty(priceAttr.Value)) continue; uint id; uint price; uint count; var idTest = uint.TryParse(idAttr.Value, out id); var priceTest = uint.TryParse(priceAttr.Value, out price); if (!idTest || !priceTest) continue; if (countAttr != null) { var countTest = uint.TryParse(countAttr.Value, out count); if (!countTest) count = 1; } else count = 1; var quality = ItemQuality.Common; if (qualityAttr != null && !string.IsNullOrEmpty(qualityAttr.Value)) { ItemQuality temp; var qualityTest = Enum.TryParse(qualityAttr.Value, true, out temp); if (qualityTest) quality = temp; } var race = ItemRaceRestriction.Universal; if (raceAttr != null && !string.IsNullOrEmpty(raceAttr.Value)) { ItemRaceRestriction temp; var raceTest = Enum.TryParse(raceAttr.Value, true, out temp); if (raceTest) race = temp; } string icon = null; if (iconAttr != null && !string.IsNullOrEmpty(iconAttr.Value)) icon = iconAttr.Value.Trim(); category.Add(new ShopItem(id, titleAttr.Value.Trim(), quality, race, icon, count, price)); } if (category.Count > 0) result.Add(category); } return result.Count == 0 ? null : result; }
private static GameShop ReadPriceList(string path) { XDocument xdoc = null; try { xdoc = XDocument.Load(path); } catch (XmlException) { } if (xdoc == null || xdoc.Root == null) { return(null); } var xNameCategories = XName.Get("categories", DefaultNamespace); var xNameCategory = XName.Get("category", DefaultNamespace); var xNameItem = XName.Get("item", DefaultNamespace); var result = new GameShop(); var categoriesRoot = xdoc.Root.Element(xNameCategories); if (categoriesRoot == null) { return(null); } foreach (var xcat in categoriesRoot.Elements(xNameCategory)) { var catAttr = xcat.Attribute("name"); if (catAttr == null || string.IsNullOrEmpty(catAttr.Value)) { return(null); } var category = new ShopItemCollection(catAttr.Value.Trim()); foreach (var xitem in xcat.Elements(xNameItem)) { var idAttr = xitem.Attribute("id"); var titleAttr = xitem.Attribute("title"); var qualityAttr = xitem.Attribute("quality"); var raceAttr = xitem.Attribute("race"); var iconAttr = xitem.Attribute("icon"); var countAttr = xitem.Attribute("count"); var priceAttr = xitem.Attribute("price"); if (idAttr == null || string.IsNullOrEmpty(idAttr.Value)) { continue; } if (titleAttr == null || string.IsNullOrEmpty(titleAttr.Value)) { continue; } if (priceAttr == null || string.IsNullOrEmpty(priceAttr.Value)) { continue; } uint id; uint price; uint count; var idTest = uint.TryParse(idAttr.Value, out id); var priceTest = uint.TryParse(priceAttr.Value, out price); if (!idTest || !priceTest) { continue; } if (countAttr != null) { var countTest = uint.TryParse(countAttr.Value, out count); if (!countTest) { count = 1; } } else { count = 1; } var quality = ItemQuality.Common; if (qualityAttr != null && !string.IsNullOrEmpty(qualityAttr.Value)) { ItemQuality temp; var qualityTest = Enum.TryParse(qualityAttr.Value, true, out temp); if (qualityTest) { quality = temp; } } var race = ItemRaceRestriction.Universal; if (raceAttr != null && !string.IsNullOrEmpty(raceAttr.Value)) { ItemRaceRestriction temp; var raceTest = Enum.TryParse(raceAttr.Value, true, out temp); if (raceTest) { race = temp; } } string icon = null; if (iconAttr != null && !string.IsNullOrEmpty(iconAttr.Value)) { icon = iconAttr.Value.Trim(); } category.Add(new ShopItem(id, titleAttr.Value.Trim(), quality, race, icon, count, price)); } if (category.Count > 0) { result.Add(category); } } return(result.Count == 0 ? null : result); }