/// <summary> /// Добавляет в базу классификаторы из файла XML /// </summary> /// <param name="updater">Пространство объектов ObjectSpace</param> /// <param name="xmlPath">Путь до файла классификатора</param> public static void UpdateDbFromXml(DevExpress.ExpressApp.IObjectSpace objSpace, string xmlPath) { XDocument doc = XDocument.Load(xmlPath); foreach (XElement el in doc.Root.Element("ROWDATA").Elements("ROW")) { // int id = Convert.ToInt32(el.Attribute("mkb").Value); // MKB10 obj = ObjectSpace.FindObject<MKB10>(CriteriaOperator.Parse("mkb=?", id)); // if (obj == null) MKB10 obj = objSpace.CreateObject <MKB10>(); obj.CODE = el.Attribute("code").Value; obj.NAME = el.Attribute("name").Value; obj.KEY = el.Attribute("key").Value; obj.High = el.Attribute("high").Value; obj.NXT = el.Attribute("nxt").Value; obj.MKB = el.Attribute("mkb").Value; obj.SEX = el.Attribute("sex").Value; obj.SP = Convert.ToInt32(el.Attribute("sp").Value); obj.AUTOP = el.Attribute("autop").Value; obj.OMS = Convert.ToInt32(el.Attribute("oms").Value); obj.OMSD = Convert.ToInt32(el.Attribute("omsd").Value); obj.REG = Convert.ToInt32(el.Attribute("reg").Value); obj.KD = Convert.ToSingle(el.Attribute("kd").Value); obj.MIN_KD = Convert.ToSingle(el.Attribute("min_kd").Value); obj.KP = Convert.ToInt32(el.Attribute("kp").Value); obj.DOKD = Convert.ToSingle(el.Attribute("dokd").Value); obj.DOKP = Convert.ToInt32(el.Attribute("dokp").Value); } }
// пример записи из XML // <ROWDATA> // <ROW id="100000" lpu_id="03001" date_vnes_inf="2015-02-11 09:44:05.098924+08" operator_id="2469" pocket_id="null" code="136" sort="null" diagn="O12.0" ksg="1" name_ksg="Отеки, протеинурия, гипертензивные расстройства в период беременности, в родах и после родов" kz="0,82" name_profile="Акушерство и гинекология"/> // <ROW id="203001" lpu_id="03001" date_vnes_inf="2015-02-11 09:43:56.323753+08" operator_id="2469" pocket_id="null" code="136" sort="null" diagn="O12.2" ksg="1" name_ksg="Отеки, протеинурия, гипертензивные расстройства в период беременности, в родах и после родов" kz="0,82" name_profile="Акушерство и гинекология"/> public static void UpdateDbFromXml(DevExpress.ExpressApp.IObjectSpace objSpace, string xmlPath) { XDocument doc = XDocument.Load(xmlPath); const string elementsContainer = "ROWDATA"; const string elementNameStartsWith = "ROW"; // диагноз в КСГ является уникальным, сверяем по нему. const string code_attr = "diagn"; StringBuilder log = new StringBuilder(); foreach (var element in doc.Root.Element(elementsContainer).Elements()) { if (element.Name.ToString().StartsWith(elementNameStartsWith) == false) { continue; } var diagnoseCode = element.Attribute(code_attr).Value; // ищем в справочнике диагнозов диагноз по коду. MKB10 diagnose = objSpace.FindObject <MKB10>(DevExpress.Data.Filtering.CriteriaOperator.Parse("MKB=?", diagnoseCode)); // если диагноз не найден if (diagnose == null) { log.AppendLine(string.Format("id: {1}. Не найден диагноз: {0}", diagnoseCode, element.Attribute("id").Value)); log.AppendLine("\tУдаляем точку в конце и ищем заново"); if (diagnoseCode[diagnoseCode.Length - 1].Equals('.')) { diagnose = objSpace.FindObject <MKB10>(DevExpress.Data.Filtering.CriteriaOperator.Parse("MKB=?", diagnoseCode.Substring(0, diagnoseCode.Length - 1))); if (diagnose == null) { log.AppendLine("\tНе найдено"); } else { log.AppendLine("\tНайдено"); } } continue; } ClinicStatGroups obj = objSpace.FindObject <ClinicStatGroups>(DevExpress.Data.Filtering.CriteriaOperator.Parse("MainDiagnose=?", diagnose)); if (obj == null) { obj = objSpace.CreateObject <ClinicStatGroups>(); obj.Name = element.Attribute("name_ksg").Value; obj.Number = int.Parse(element.Attribute("ksg").Value); obj.KoeffZatrat = double.Parse(element.Attribute("kz").Value); obj.Diagnose = diagnose; var codeProfil = element.Attribute("code").Value; obj.Profil = objSpace.FindObject <MedProfil>(DevExpress.Data.Filtering.CriteriaOperator.Parse("Code=?", codeProfil)); } } if (log.Length > 0) { System.IO.File.AppendAllText(xmlPath + ".log", log.ToString(), Encoding.UTF8); } }