public bool Import(string strRulesetFile) { this.Clear(); bool Result = false; this.RulesetParameters.Clear(); this.ByteOrders.Clear(); this.VBFCreationDatas.Clear(); XmlDocument Ruleset = new XmlDocument(); try { Ruleset.Load(strRulesetFile); XmlNamespaceManager XmlNSMgr = new XmlNamespaceManager(Ruleset.NameTable); XmlNSMgr.AddNamespace("Namespace", Ruleset.SelectSingleNode(" * ").NamespaceURI); #region Ruleset Page XmlNodeList RowsList = Ruleset.SelectSingleNode("Namespace:Workbook/Namespace:Worksheet[@Namespace:Name = 'Ruleset']", XmlNSMgr).SelectSingleNode("Namespace:Table", XmlNSMgr).SelectNodes("Namespace:Row", XmlNSMgr); int RowsNumber = RowsList.Count; //Title if (RowsList[0].ChildNodes[0].InnerText.Trim() == "Version") this.Version = RowsList[0].ChildNodes[0].InnerText.Trim(); if (RowsList[1].ChildNodes[0].InnerText.Trim() == "Partnumber") this.Partnumber = RowsList[1].ChildNodes[0].InnerText.Trim(); RulesetParameter mParameter = new RulesetParameter(); RulesetParameter mParameterBackup = new RulesetParameter(); RulesetOption mRulesetOption = new RulesetOption(); bool ParameterBackupFlag = false; for (int i = RulesetDefaultStartLine -1;i<(RowsNumber); i++) { Test = RowsList[i].OuterXml; //Remark if (RowsList[i].SelectNodes("*/Namespace:Data", XmlNSMgr).Count == 0) { //Skip Do nothing } else if (RowsList[i].SelectNodes("*/Namespace:Data", XmlNSMgr).Count != 5) { if (!ParameterBackupFlag) { ParameterBackupFlag = true; mParameterBackup = new RulesetParameter(); string Statement = RowsList[i].InnerText; string[] StatementList = Statement.Split(new char[] { '[', ']' }); if (StatementList.Length == 3) { try { mParameterBackup.MDF = Convert.ToInt32(StatementList[1], 16); mParameterBackup.Remark = StatementList[2]; } catch { try { mParameterBackup.MDF = Convert.ToInt32(StatementList[1], 2); mParameterBackup.Remark = StatementList[2]; } catch { mParameterBackup.Remark = Statement; } } } else { mParameterBackup.Remark = Statement; } } } //Parameter else { if (!ParameterBackupFlag) { RulesetOption t = new RulesetOption(); t.Statement = RowsList[i].ChildNodes[4].InnerText.Trim(); t.Value = ConvertNum(RowsList[i].ChildNodes[3].InnerText.Trim()); if (mParameter.MDF == 0) mParameter.MDF = Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim() + RowsList[i].ChildNodes[1].InnerText.Trim() + RowsList[i].ChildNodes[2].InnerText.Trim()[0], 16); mParameter.RulesetOptions.Add(t); } else { //New Parameter if (mParameter.BlockID != Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim(), 16) || mParameter.Byte != Convert.ToInt32(RowsList[i].ChildNodes[1].InnerText.Trim(), 16) || mParameter.Bit != Convert.ToInt32(RowsList[i].ChildNodes[2].InnerText.Trim().Substring(0,1), 16) ) { if (mParameter.BlockID == 0 && mParameter.Byte == 0 && mParameter.Bit == 0 && mParameter.BitLength == 0) { //Don't Save Old } else //Save Old Parameter this.RulesetParameters.Add(mParameter); //Format New Parameter mParameter = mParameterBackup; if (mParameter.MDF == 0) mParameter.MDF = Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim() + RowsList[i].ChildNodes[1].InnerText.Trim() + RowsList[i].ChildNodes[2].InnerText.Trim()[0], 16); mParameter.BlockID = Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText.Trim(), 16); mParameter.Byte = Convert.ToInt32(RowsList[i].ChildNodes[1].InnerText.Trim(), 16); string BitString = RowsList[i].ChildNodes[2].InnerText.Trim(); string[] BitStringList = BitString.Split('-'); if (BitStringList.Length == 2) { mParameter.Bit = Convert.ToInt32(BitStringList[0], 16); mParameter.BitLength = mParameter.Bit - Convert.ToInt32(BitStringList[1], 16) + 1; } else if (BitStringList.Length == 1) { mParameter.Bit = Convert.ToInt32(BitStringList[0], 16); mParameter.BitLength = 1; } else { throw new Exception(); } //Add Option RulesetOption t = new RulesetOption(); t.Statement = RowsList[i].ChildNodes[4].InnerText.Trim(); t.Value = ConvertNum(RowsList[i].ChildNodes[3].InnerText.Trim()); mParameter.RulesetOptions.Add(t); } // Old Parameter else { RulesetOption t = new RulesetOption(); t.Statement = RowsList[i].ChildNodes[4].InnerText.Trim(); t.Value = ConvertNum(RowsList[i].ChildNodes[3].InnerText.Trim()); mParameter.RulesetOptions.Add(t); } ParameterBackupFlag = false; } } } RulesetParameters.Add(mParameter); #endregion #region Byte Ordage Page RowsList = Ruleset.SelectSingleNode("Namespace:Workbook/Namespace:Worksheet[@Namespace:Name = 'Block Order']", XmlNSMgr).SelectSingleNode("Namespace:Table", XmlNSMgr).SelectNodes("Namespace:Row", XmlNSMgr); for (int i = BlockOrderDefaultStartLine - 1; i < RowsList.Count; i++) this.ByteOrders.Add(Convert.ToInt32(RowsList[i].ChildNodes[0].InnerText, 16)); #endregion #region VBFCreationData RowsList = Ruleset.SelectSingleNode("Namespace:Workbook/Namespace:Worksheet[@Namespace:Name = 'VBF Creation Data']", XmlNSMgr).SelectSingleNode("Namespace:Table", XmlNSMgr).SelectNodes("Namespace:Row", XmlNSMgr); for (int i=1;i<RowsList.Count;i++) { VBFCreationData t = new VBFCreationData(); if (t.Import(RowsList[i])) this.VBFCreationDatas.Add(t); } #endregion Result = true; } catch { Result = false; } return Result; }
public List<VBFCreationData> getDataByProject(string Input) { string[] Condition = Input.Split(' '); if (Condition.Length == 1) { return null; } else { string Model = Condition[0]; string ModelYear = Condition[1].Replace("MY", ""); string Command = "Cartype/Model[@Name='" + Model + "' and @MY='" + ModelYear + "']"; XmlNode Target = CarTypeDoc.SelectSingleNode(Command); if (Target == null) { return null; } List<VBFCreationData> Result = new List<VBFCreationData>(); try { for (int i = 0; i < Target.ChildNodes.Count; i++) { VBFCreationData t = new VBFCreationData(Target.ChildNodes[i].Attributes["NodeName"].Value , Target.ChildNodes[i].Attributes["sw_part_type"].Value , Target.ChildNodes[i].Attributes["network"].Value , Convert.ToUInt32(Target.ChildNodes[i].Attributes["ecu_address"].Value, 16) , Convert.ToUInt32(Target.ChildNodes[i].Attributes["parameter_start_address"].Value, 16) , Convert.ToUInt32(Target.ChildNodes[i].Attributes["parameter_erase_length"].Value, 16) , Target.ChildNodes[i].Attributes["archive"].Value , Target.ChildNodes[i].Attributes["ccf_type"].Value , Target.ChildNodes[i].Attributes["SBL"].Value , Target.ChildNodes[i].Attributes["Security"].Value , Target.ChildNodes[i].Attributes["SWDL"].Value); Result.Add(t); } } catch { return null; } return Result; } }