/*Метод возвращающий тариф */ private Tariff buildTarrif(XmlNode xmlNode) { Tariff tariff = new Tariff(); if (xmlNode.Attributes.Count > 0) { XmlNode attr = xmlNode.Attributes.GetNamedItem("name"); if (attr != null) { tariff.setName(attr.Value); } attr = xmlNode.Attributes.GetNamedItem("operator_name"); if (attr != null) { tariff.setOperatorName(attr.Value); } foreach (XmlNode childnode in xmlNode.ChildNodes) { if (childnode.Name == "payroll") { tariff.setPayroll(Convert.ToDouble(childnode.InnerText)); } if (childnode.Name == "call_prices") { tariff.setCallPrices(buildCallPrices(childnode)); } if (childnode.Name == "sms_price") { tariff.setSmsPrice(Convert.ToDouble(childnode.InnerText)); } if (childnode.Name == "parameters") { tariff.setParameters(buildParameters(childnode)); } } } return(tariff); }
/*Метод, который парсит Xml-файл */ public List <Tariff> Read_XML() { List <Tariff> tariffs = new List <Tariff>(); XSDValidation = true; XmlReaderSettings xmlSettings = new XmlReaderSettings(); xmlSettings.Schemas.Add("http://www.example.com/students", xsdPath); xmlSettings.ValidationType = ValidationType.Schema; xmlSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler); Tariff tariff = new Tariff(); CallPrices callPrices = new CallPrices(); Parameters parameters = new Parameters(); using (XmlReader tarr = XmlReader.Create(xmlPath, xmlSettings)) { try { while (tarr.Read()) { if (tarr.HasAttributes) { // получение атрибутов while (tarr.MoveToNextAttribute()) { if (tarr.Name == "name") { tariff.setName(tarr.Value); } if (tarr.Name == "operator_name") { tariff.setOperatorName(tarr.Value); } } } // получение значений элементов Xml-файла switch (tarr.NodeType) { case XmlNodeType.Element: switch (tarr.Name) { case "payroll": tarr.Read(); tariff.setPayroll(Convert.ToDouble(tarr.Value)); break; case "call_prices": tarr.Read(); tariff.setCallPrices(callPrices); break; case "inside_network": tarr.Read(); tariff.getCallPrices().setInsideNetwork(Convert.ToDouble(tarr.Value)); break; case "outside_network": tarr.Read(); tariff.getCallPrices().setOutsideNetwork(Convert.ToDouble(tarr.Value)); break; case "fixed_phone": tarr.Read(); tariff.getCallPrices().setFixed_Phone(Convert.ToDouble(tarr.Value)); break; case "sms_price": tarr.Read(); tariff.setSmsPrice(Convert.ToDouble(tarr.Value)); break; case "parameters": tarr.Read(); tariff.setParameters(parameters); break; case "favorite_number": tarr.Read(); tariff.getParameters().setFavouriteNumber(Convert.ToInt64(tarr.Value)); break; case "tariffication": tarr.Read(); tariff.getParameters().setTarifficaton(tarr.Value); break; case "connection_fee": tarr.Read(); tariff.getParameters().setConnection_Fee(Convert.ToDouble(tarr.Value)); break; } break; // добавление в список законченного объекта case XmlNodeType.EndElement: if (tarr.Name == "tariff") { tariffs.Add(tariff); // "обнуление" переменных tariff = new Tariff(); parameters = new Parameters(); callPrices = new CallPrices(); } break; } } } catch (Exception) { XSDValidation = false; } } // вернуть список тарифов return(tariffs); }