public void LoadXml(XmlDocument xDoc, XmlNode rootNode, Boolean refLoad = false) { if (rootNode == null) { return; } _xDoc = xDoc; XmlControlHandler.GetDefaultXmlItemAttributes(rootNode, xDoc, this); XmlNode headerNode = XmlGetter.Child(rootNode, Properties.Resources.CommandHeader_Tag); //header 매칭.. _header.LoadXml(HeaderPath + "\\" + _headerFileName, refLoad); if (headerNode != null) //Header 태그가 없으면 그냥 둔다. { foreach (String fieldName in _header.FieldList.Keys) { String attr = XmlGetter.Attribute(headerNode, fieldName); if (attr.Length > 0) { _header.FieldList[fieldName].Data = attr; } } } //_header.LoadXml(_xDoc, headerNode); XmlNode dataNode = XmlGetter.Child(rootNode, Properties.Resources.CommandData_Tag); if (dataNode != null) { _data.LoadXml(_xDoc, dataNode); } }
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; } }