public void LoadXml(XmlDocument xDoc, XmlNode rootNode, Boolean refLoad = false) { if (rootNode == null) { return; } _xDoc = xDoc; XmlControlHandler.GetDefaultXmlItemAttributes(rootNode, xDoc, this); XmlNodeList fields = XmlGetter.Children(rootNode, "Field"); int count = 0; foreach (XmlNode field in fields) { XmlCommandField xField = new XmlCommandField(null); xField.LoadXml(xDoc, field, refLoad); FieldList.Add(xField.Name, xField); if (xField.FieldType == FieldTypes.DataSize) { _dataSizeField = xField; } else if (xField.Name.ToLower().Equals("id")) { _idField = xField; } else if (xField.Name.ToLower().Equals("tag")) { _tagField = xField; } addItem(count++, xField.DataSize, true); } setBuffSize(); int offset = 0; foreach (XmlCommandField field in FieldList.Values) { field.SetTargetBuffer(this.buffer, offset); field.Data = field.Data; offset += field.DataSize; } /* * XmlCommandFields xmlFields = new XmlCommandFields(null); * xmlFields.LoadXml(xDoc, fields, refLoad); */ }
public void LoadXml(XmlDocument xDoc, XmlNode rootNode, Boolean refLoad = false) { if (rootNode == null) { return; } _xDoc = xDoc; XmlControlHandler.GetDefaultXmlItemAttributes(rootNode, xDoc, this); //int count = 0; //int index = 0; int count = 0; _pacektHandlingType = PacketHandlingTypes.Static;//default foreach (XmlNode fieldNode in rootNode.ChildNodes) { if (fieldNode.Name.Equals(Properties.Resources.Fields_Field_Tag)) { XmlCommandField field = new XmlCommandField(this); field.LoadXml(xDoc, fieldNode); addItem(count++, field.DataSize, field.FieldType == FieldTypes.Dynamic, field.DataType); _fieldList.Add(field.Name, field); if (field.FieldType == FieldTypes.LoopCount) { _loopCountField = field; //field.DataValue = 0; _pacektHandlingType = PacketHandlingTypes.Loop; } else if (field.FieldType == FieldTypes.VariableSize) { _variableSizeField = field; _pacektHandlingType = PacketHandlingTypes.Serial; } else if (field.FieldType == FieldTypes.Variable) { _variableField = field; if (_structType == StructType.Command) { if (_variableSizeField == null) { throw new Exception("There's no FieldType[VariableSizeField] for this field[" + field.Name + "]"); } else { _variableSizeField.DataValue = Buffer.ByteLength(field.TargetBuffer); } } } } else if (fieldNode.Name.Equals(Properties.Resources.Fields_Loop_Tag)) { XmlCommandFields fields = new XmlCommandFields(_parentFields, _structType); String name = XmlGetter.Attribute(fieldNode, Properties.Resources.Fields_Loop_Name_Attr); fields.LoadXml(xDoc, fieldNode, refLoad); TemplateFields = fields; fields.Name = name; fields.TemplateName = name; //NumberOfFields = Convert.ToInt32(SizeDefineField.DataValue);//default로 지정된 크기를 만들어준다. //_fieldsList.Add(name, fields); } } setBuffSize(); //size를 fix함.. int offset = 0; for (int i = 0; i < _fieldList.Values.Count; i++) { _fieldList.ValueList[i].SetTargetBuffer(this.buffer, offset); if (_fieldList.ValueList[i].FieldType == FieldTypes.Dynamic) { _fieldList.ValueList[i].Data = _fieldList.ValueList[i].Data;//실제 값을 넣어준다. } else if (_fieldList.ValueList[i].FieldType == FieldTypes.LoopCount) { _fieldList.ValueList[i].Data = "0"; } else { _fieldList.ValueList[i].Data = _fieldList.ValueList[i].Data;//실제 값을 넣어준다. } offset += _fieldList.ValueList[i].DataSize; } }