/// <summary> /// Конструктор основной с параметрами /// </summary> /// <param name="dtRecieved">Мктка даты/времени получения</param> /// <param name="xmlSource">XML-документ</param> public PACKAGE(DateTime dtRecieved, XmlDocument xmlSource) { m_dtRecieved = dtRecieved; m_dtSended = DateTime.MinValue; m_state = STATE.NEW; m_xmlSource = UDPListener.CopyXmlDocument(xmlSource); m_tableParameters = new DataTable(); m_tableParameters.Columns.AddRange(new DataColumn[] { new DataColumn(@"GROUP", typeof(string)) , new DataColumn(@"PARAMETER", typeof(string)) }); m_tableValues = new DataTable(); m_tableValues.Columns.AddRange(new DataColumn[] { new DataColumn(@"GROUP", typeof(string)) , new DataColumn(@"PARAMETER", typeof(string)) , new DataColumn(@"VALUE", typeof(float)) }); m_listXmlTree = new FormMain.ListXmlTree(); m_state = STATE.PARSING; for (int i = 0; i < m_xmlSource.ChildNodes.Count; i++) { if (m_xmlSource.ChildNodes[i].NodeType == XmlNodeType.Element) { m_listXmlTree.Add(new FormMain.ListXmlTree()); m_listXmlTree.Tag = m_xmlSource.ChildNodes[i].Name; parseNode(m_xmlSource.ChildNodes[i], m_listXmlTree[m_listXmlTree.Count - 1] as FormMain.ListXmlTree); } else { ; } } m_state = STATE.PARSED; //ERROR }
/// <summary> /// Распознать элемент XML-документа /// </summary> /// <param name="node">Элемент XML-документа</param> /// <param name="listXmlTree">Элемент списка</param> /// <returns>Результат обработки элемента XML-документа</returns> private int parseNode(XmlNode node, FormMain.ListXmlTree listXmlTree) { int iRes = -1; FormMain.ListXmlTree newItemXmlTree; float value = -1F; if (node.HasChildNodes == true) { if (node.ChildNodes.Count > 0) { for (int i = 0; i < node.ChildNodes.Count; i++) { if (!(node.ChildNodes[i].Attributes == null)) { newItemXmlTree = new FormMain.ListXmlTree(); listXmlTree.Add(newItemXmlTree); newItemXmlTree.Tag = node.ChildNodes[i].Name; parseNode(node.ChildNodes[i], newItemXmlTree); } else { //Logging.Logg().Warning(MethodBase.GetCurrentMethod() // , string.Format(@"XML-элемент Name={0} не имеет аттрибутов...", node.Name) // , Logging.INDEX_MESSAGE.NOT_SET) ; } } } else { return(1); } } else { try { if (!(node.Attributes == null)) { if (string.IsNullOrEmpty(node.Attributes.GetNamedItem("value").Value) == false) { if (float.TryParse(node.Attributes.GetNamedItem("value").Value, out value) == false) { value = -1F; } else { ; //значние получено } } else { value = -1F; } listXmlTree.Attributes = new List <KeyValuePair <string, string> >(); if (!(node.Attributes.GetNamedItem("value") == null)) { listXmlTree.Attributes.Add(new KeyValuePair <string, string>(node.Attributes.GetNamedItem("value").Name , node.Attributes.GetNamedItem("value").Value)); } else { Logging.Logg().Warning(MethodBase.GetCurrentMethod() , string.Format(@"XML-элемент Name={0} не имеет аттрибута 'value'...", node.Name) , Logging.INDEX_MESSAGE.NOT_SET); } m_tableValues.Rows.Add(new object[] { node.ParentNode.Name , node.Name , value }); iRes = 0; } else { ; //??? } } catch (Exception e) { Logging.Logg().Exception(e, @"PackageHandlerQueue.PACKAGE::parseNode () - ...", Logging.INDEX_MESSAGE.NOT_SET); } } return(iRes); }