private void CreateExchangeItemsFromXMLNode(XmlNode ExchangeItem, string Identifier) { //Create Dimensions Dimension omiDimensions = new Dimension(); XmlNodeList dimensions = ExchangeItem.SelectNodes("//Dimensions/Dimension"); // You can filter elements here using XPath foreach (XmlNode dimension in dimensions) { if (dimension["Base"].InnerText == "Length") { omiDimensions.SetPower(DimensionBase.Length, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "Time") { omiDimensions.SetPower(DimensionBase.Time, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "AmountOfSubstance") { omiDimensions.SetPower(DimensionBase.AmountOfSubstance, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "Currency") { omiDimensions.SetPower(DimensionBase.Currency, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "ElectricCurrent") { omiDimensions.SetPower(DimensionBase.ElectricCurrent, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "LuminousIntensity") { omiDimensions.SetPower(DimensionBase.LuminousIntensity, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "Mass") { omiDimensions.SetPower(DimensionBase.Mass, Convert.ToDouble(dimension["Power"].InnerText)); } else if (dimension["Base"].InnerText == "Temperature") { omiDimensions.SetPower(DimensionBase.Temperature, Convert.ToDouble(dimension["Power"].InnerText)); } } //Create Units _omiUnits = new Unit(); XmlNode units = ExchangeItem.SelectSingleNode("Quantity/Unit"); _omiUnits.ID = units["ID"].InnerText; if (units["Description"] != null) { _omiUnits.Description = units["Description"].InnerText; } if (units["ConversionFactorToSI"] != null) { _omiUnits.ConversionFactorToSI = Convert.ToDouble(units["ConversionFactorToSI"].InnerText); } if (units["OffSetToSI"] != null) { _omiUnits.OffSetToSI = Convert.ToDouble(units["OffSetToSI"].InnerText); } //Create Quantity Quantity omiQuantity = new Quantity(); XmlNode quantity = ExchangeItem.SelectSingleNode("Quantity"); omiQuantity.ID = quantity["ID"].InnerText; if (quantity["Description"] != null) { omiQuantity.Description = quantity["Description"].InnerText; } omiQuantity.Dimension = omiDimensions; omiQuantity.Unit = _omiUnits; if (quantity["ValueType"] != null) { if (quantity["ValueType"].InnerText == "Scalar") { omiQuantity.ValueType = OpenMI.Standard.ValueType.Scalar; } else if (quantity["ValueType"].InnerText == "Vector") { omiQuantity.ValueType = OpenMI.Standard.ValueType.Vector; } } //Create Element Set ElementSet omiElementSet = new ElementSet(); XmlNode elementSet = ExchangeItem.SelectSingleNode("ElementSet"); omiElementSet.ID = elementSet["ID"].InnerText; if (elementSet["Description"] != null) { omiElementSet.Description = elementSet["Description"].InnerText; } try { //add elements from shapefile to element set SMW.Utilities utils = new SMW.Utilities(); _shapefilepath = elementSet["ShapefilePath"].InnerText; omiElementSet = utils.AddElementsFromShapefile(omiElementSet, _shapefilepath); } catch (Exception) { Debug.WriteLine("An Element Set has not been declared using AddElementsFromShapefile"); } if (Identifier == "OutputExchangeItem") { //create exchange item OutputExchangeItem omiOutputExchangeItem = new OutputExchangeItem(); omiOutputExchangeItem.Quantity = omiQuantity; omiOutputExchangeItem.ElementSet = omiElementSet; //add the output exchange item to the list of output exchange items for the component this._outputs.Add(omiOutputExchangeItem); if (!this._quantities.ContainsKey(omiQuantity.ID)) { this._quantities.Add(omiQuantity.ID, omiQuantity); } if (!this._elementSets.ContainsKey(omiElementSet.ID)) { this._elementSets.Add(omiElementSet.ID, omiElementSet); } } else if (Identifier == "InputExchangeItem") { //create exchange item InputExchangeItem omiInputExchangeItem = new InputExchangeItem(); omiInputExchangeItem.Quantity = omiQuantity; omiInputExchangeItem.ElementSet = omiElementSet; //add the output exchange item to the list of output exchange items for the component this._inputs.Add(omiInputExchangeItem); if (!this._quantities.ContainsKey(omiQuantity.ID)) { this._quantities.Add(omiQuantity.ID, omiQuantity); } if (!this._elementSets.ContainsKey(omiElementSet.ID)) { this._elementSets.Add(omiElementSet.ID, omiElementSet); } } }
private void CreateExchangeItemsFromXMLNode(XmlNode ExchangeItem, string Identifier, int eid) { //-- get dimension child nodes XmlNodeList children = ExchangeItem.ChildNodes; XmlNode quantityNode = children[1]; //HACK Dictionary <string, double> dims = new Dictionary <string, double>(); foreach (XmlNode child in quantityNode) { if (child.Name == "Dimensions") { foreach (XmlNode dimension in child.ChildNodes) { //-- get the inner xml for the element string text = dimension.InnerXml; //-- get the start and end indices of "base" and "power" int[] indices = new int[4] { text.IndexOf("<Base>") + 6, text.IndexOf("</Base>") - 1, text.IndexOf("<Power>") + 7, text.IndexOf("</Power>") - 1 }; //-- build base string Base = ""; for (int i = indices[0]; i <= indices[1]; i++) { Base += text[i]; } //-- build power string power = ""; for (int i = indices[2]; i <= indices[3]; i++) { power += text[i]; } //-- store dimension name and power dims.Add(Base, Convert.ToDouble(power)); } } } //XmlNode dims = ExchangeItem.SelectSingleNode("//Dimensions"); //Create Dimensions Dimension omiDimensions = new Dimension(); //XmlNodeList dimensions = ExchangeItem.SelectNodes("//Dimensions/Dimension"); // You can filter elements here using XPath foreach (KeyValuePair <string, double> dim in dims) { if (dim.Key.ToUpper() == "LENGTH") { omiDimensions.SetPower(DimensionBase.Length, dim.Value); } else if (dim.Key.ToUpper() == "TIME") { omiDimensions.SetPower(DimensionBase.Time, dim.Value); } else if (dim.Key.ToUpper() == "AMOUNTOFSUBSTANCE") { omiDimensions.SetPower(DimensionBase.AmountOfSubstance, dim.Value); } else if (dim.Key.ToUpper() == "CURRENCY") { omiDimensions.SetPower(DimensionBase.Currency, dim.Value); } else if (dim.Key.ToUpper() == "ELECTRICCURRENT") { omiDimensions.SetPower(DimensionBase.ElectricCurrent, dim.Value); } else if (dim.Key.ToUpper() == "LUMINOUSINTENSITY") { omiDimensions.SetPower(DimensionBase.LuminousIntensity, dim.Value); } else if (dim.Key.ToUpper() == "MASS") { omiDimensions.SetPower(DimensionBase.Mass, dim.Value); } else if (dim.Key.ToUpper() == "TEMPERATURE") { omiDimensions.SetPower(DimensionBase.Temperature, dim.Value); } } //Create Units _omiUnits = new Unit(); XmlNode units = ExchangeItem.SelectSingleNode("Quantity/Unit"); _omiUnits.ID = units["ID"].InnerText; if (units["Description"] != null) { _omiUnits.Description = units["Description"].InnerText; } if (units["ConversionFactorToSI"] != null) { _omiUnits.ConversionFactorToSI = Convert.ToDouble(units["ConversionFactorToSI"].InnerText); } if (units["OffSetToSI"] != null) { _omiUnits.OffSetToSI = Convert.ToDouble(units["OffSetToSI"].InnerText); } //Create Quantity Quantity omiQuantity = new Quantity(); XmlNode quantity = ExchangeItem.SelectSingleNode("Quantity"); omiQuantity.ID = quantity["ID"].InnerText; if (quantity["Description"] != null) { omiQuantity.Description = quantity["Description"].InnerText; } omiQuantity.Dimension = omiDimensions; omiQuantity.Unit = _omiUnits; if (quantity["ValueType"] != null) { if (quantity["ValueType"].InnerText == "Scalar") { omiQuantity.ValueType = OpenMI.Standard.ValueType.Scalar; } else if (quantity["ValueType"].InnerText == "Vector") { omiQuantity.ValueType = OpenMI.Standard.ValueType.Vector; } } //Create Element Set ElementSet omiElementSet = new ElementSet(); XmlNode elementSet = ExchangeItem.SelectSingleNode("ElementSet"); omiElementSet.ID = elementSet["ID"].InnerText; if (elementSet["Description"] != null) { omiElementSet.Description = elementSet["Description"].InnerText; } try { //add elements from shapefile to element set SMW.Utilities utils = new SMW.Utilities(); _shapefilepath = elementSet["ShapefilePath"].InnerText; omiElementSet = utils.AddElementsFromShapefile(omiElementSet, _shapefilepath); } catch (Exception) { Debug.WriteLine("An Element Set has not been declared using AddElementsFromShapefile"); } if (Identifier == "OutputExchangeItem") { //create exchange item OutputExchangeItem omiOutputExchangeItem = new OutputExchangeItem(); omiOutputExchangeItem.Quantity = omiQuantity; omiOutputExchangeItem.ElementSet = omiElementSet; //add the output exchange item to the list of output exchange items for the component this._outputs.Add(omiOutputExchangeItem); if (!this._quantities.ContainsKey(omiQuantity.ID)) { this._quantities.Add(omiQuantity.ID, omiQuantity); } if (!this._elementSets.ContainsKey(omiElementSet.ID)) { this._elementSets.Add(omiElementSet.ID, omiElementSet); } } else if (Identifier == "InputExchangeItem") { //create exchange item InputExchangeItem omiInputExchangeItem = new InputExchangeItem(); omiInputExchangeItem.Quantity = omiQuantity; omiInputExchangeItem.ElementSet = omiElementSet; //add the output exchange item to the list of output exchange items for the component this._inputs.Add(omiInputExchangeItem); if (!this._quantities.ContainsKey(omiQuantity.ID)) { this._quantities.Add(omiQuantity.ID, omiQuantity); } if (!this._elementSets.ContainsKey(omiElementSet.ID)) { this._elementSets.Add(omiElementSet.ID, omiElementSet); } } }