| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml;using System.IO;using System.Data;namespace IControls_FireManager{    // XML 생성 및 처리는 여기 클래스에서 전담한다    public static class _Xml    {        public static string Get_Value(string XML_Msg, string ElementName, string AttributeName)        {            try            {                TextReader stringReader = new StringReader(XML_Msg);                XmlTextReader reader = new XmlTextReader(stringReader);                if (XML_Msg == null || XML_Msg.Length == 0 || ElementName == null || ElementName.Length == 0)  // null 값 허용안함                {                    return null;                }                else if (AttributeName == null || AttributeName.Length == 0) // 태그값 내용만 가져오기                {                    bool Get = false;                    while (reader.Read())                    {                        switch (reader.NodeType)                        {                            case XmlNodeType.Element:                                if (reader.Name == ElementName) Get = true;                                break;                            case XmlNodeType.Text:                                if (Get == true) return reader.Value.ToString();                                break;                        }                    }                }                else // 속성값 가져오기                {                    while (reader.Read())                    {                        switch (reader.NodeType)                        {                            case XmlNodeType.Element:                                if (reader.Name == ElementName)                                {                                    reader.MoveToAttribute(AttributeName);                                    while (reader.ReadAttributeValue())                                        return reader.Value.ToString();                                }                                break;                        }                    }                }                return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함.            }            catch (Exception e)            {                // LOG                                _Event.DebugView_SendMessage_Write(e.ToString());                return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함            }        }        public static string Get_Value(XmlTextReader reader, string ElementName, string AttributeName)        {            try            {                if (AttributeName == null || AttributeName.Length == 0) // 태그값 내용만 가져오기                {                    bool Get = false;                    while (reader.Read())                    {                        switch (reader.NodeType)                        {                            case XmlNodeType.Element:                                if (reader.Name == ElementName) Get = true;                                break;                            case XmlNodeType.Text:                                if (Get == true) return reader.Value.ToString();                                break;                        }                    }                }                else // 속성값 가져오기                {                    while (reader.Read())                    {                        switch (reader.NodeType)                        {                            case XmlNodeType.Element:                                if (reader.Name == ElementName)                                {                                    reader.MoveToAttribute(AttributeName);                                    while (reader.ReadAttributeValue())                                        return reader.Value.ToString();                                }                                break;                        }                    }                }                return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함.            }            catch (Exception e)            {                // LOG                                _Event.DebugView_SendMessage_Write(e.ToString());                return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함            }        }        // XML 주석 (XMLComment)        public static StringBuilder Set_XMLComment(string Comment)        {            StringBuilder strPacket = new StringBuilder();            strPacket.Append("<!-- " + Comment + " -->\r\n");            return strPacket;        }        // XML 생성 (XMLHeader)        public static StringBuilder Set_XMLHeader()        {            StringBuilder strPacket = new StringBuilder();            strPacket.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n");            return strPacket;        }        // XML 생성 (BodyHeader)         // Body_Type : 통신용, 시스템설정용으로 구분        // head : 상위 및 하위         public static StringBuilder Set_BodyHeader(Xml_Body_Type Body_Type,bool Head)        {            StringBuilder strPacket = new StringBuilder();            switch(Body_Type)            {                case Xml_Body_Type.Program_Configuration:                    if (Head == true)                        strPacket.Append("<IControls_FireManager>\r\n");                    else                        strPacket.Append("</IControls_FireManager>");                    break;                case Xml_Body_Type.TCPIP_Protocol:                    if (Head == true)                        strPacket.Append("<icse>\r\n");                    else                        strPacket.Append("</icse>");                    break;                case Xml_Body_Type.FIRE_FieldSetting:                    if (Head == true)                        strPacket.Append("<FIELD_CONF>\r\n");                    else                        strPacket.Append("</FIELD_CONF>");                    break;                case Xml_Body_Type.FIRE_Receiver:                    if (Head == true)                        strPacket.Append("<Project_Receiver>\r\n");                    else                        strPacket.Append("</Project_Receiver>");                    break;                }            return strPacket;        }        // XML 생성 (Body)        // Key_Data 의 예시 "Key1=Data1;Key2=Data2"         public static StringBuilder Set_Body(string Element_Name, string Element_Value, string KeyData, bool CarriageReturn)        {            try            {                StringBuilder strPacket = new StringBuilder();                strPacket.Append("<" + Element_Name);                // 속성 이름 임시 저장소                string Temp_Names = _Convert.String_to_Key_Data(KeyData, true, true);                // 제거 문자대로 분리시켜버림                string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);                // 속성 값 임시 저장소                string Temp_Values = _Convert.String_to_Key_Data(KeyData, false, true);                // 제거 문자대로 분리시켜버림                string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);                // 개수만큼 만들어서 속성 값 생성                for (int i = 0; i < Column_Names.Length; i++)                    strPacket.Append(" " + Column_Names[i] + "=" + "\"" + Column_Values[i] + "\"");                // 마무리                strPacket.Append("/>");                //strPacket.Append(Element_Value);                //strPacket.Append("</" + Element_Name + ">");                                if (CarriageReturn == true) strPacket.Append("\r\n");                return strPacket;            }            catch (Exception e)            {                // LOG                                _Event.DebugView_SendMessage_Write(e.ToString());                return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함            }        }        // 사용 예시 "Key1:Key2,"Data1:Data2"         public static StringBuilder Set_Body(string charsTrim, string Element_Name, string Element_Value, string Attribute_Name, string Attribute_Value, bool CarriageReturn)        {            StringBuilder strPacket = new StringBuilder();            strPacket.Append("<" + Element_Name);            // 구분자 설정            char[] charsToTrim = { Convert.ToChar(charsTrim) };            // 속성 이름 임시 저장소            string Temp_Names = Attribute_Name;            // 제거 문자대로 분리시켜버림            string[] Attribute_Names = Temp_Names.Split(charsToTrim);            // 속성 값 임시 저장소            string Temp_Values = Attribute_Value;            // 제거 문자대로 분리시켜버림            string[] Attribute_Values = Temp_Values.Split(charsToTrim);            // 개수만큼 만들어서 속성 값 생성            for (int i = 0; i < Attribute_Names.Length; i++)                strPacket.Append(" " + Attribute_Names[i] + "=" + "\"" + Attribute_Values[i] + "\"");            // 마무리            strPacket.Append("/>");            //strPacket.Append(Element_Value);            //strPacket.Append("</" + Element_Name + ">");            if (CarriageReturn == true) strPacket.Append("\r\n");            return strPacket;        }        // 특별 용도         // 상위에 있는 함수와는 별개로 끝나지 않는 태그로 구성        // ex) <Field Receiver_ID="1" ID="0" Name="메인" IMAGE="HOME.jpg">        public static StringBuilder Set_Body_NotEnd(string Element_Name, string Element_Value, string KeyData, bool CarriageReturn)        {            try            {                StringBuilder strPacket = new StringBuilder();                strPacket.Append("<" + Element_Name);                // 속성 이름 임시 저장소                string Temp_Names = _Convert.String_to_Key_Data(KeyData, true, true);                // 제거 문자대로 분리시켜버림                string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);                // 속성 값 임시 저장소                string Temp_Values = _Convert.String_to_Key_Data(KeyData, false, true);                // 제거 문자대로 분리시켜버림                string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);                // 개수만큼 만들어서 속성 값 생성                for (int i = 0; i < Column_Names.Length; i++)                    strPacket.Append(" " + Column_Names[i] + "=" + "\"" + Column_Values[i] + "\"");                // 마무리                strPacket.Append(">");                //strPacket.Append(Element_Value);                //strPacket.Append("</" + Element_Name + ">");                                if (CarriageReturn == true) strPacket.Append("\r\n");                return strPacket;            }            catch (Exception e)            {                // LOG                                _Event.DebugView_SendMessage_Write(e.ToString());                return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함            }        }        // 상위에 있는 함수와는 별개로 끝나지 않는 태그를 읽기        public static bool Read_Receiver_XML(string ProjectPath)        {            try            {                   // 일반 텍스트로 읽고                string xml = File.ReadAllText(ProjectPath);                System.IO.StringReader reader = new StringReader(xml);                // 데이타셋                DataSet ds = new DataSet();                // XML 파일을 인코딩                ds.ReadXml(reader, XmlReadMode.Auto);                // 데이타셋의 테이블 두번째 바디부터 행별로 가져온다                DataRowCollection rows = ds.Tables[0].Rows;                // 클래스를 각각 해쉬에 추가                foreach (DataRow row in rows)                {                    //_ReceiverXML ReceiverXML = new _ReceiverXML();                    //ReceiverXML.ID = row["ID"].ToString();                    //ReceiverXML.IP = row["IP"].ToString();                    //ReceiverXML.KEY_NAME = row["NAME"].ToString();                    //// 해쉬 추가                    //if (_Hash.Add(_Data.HASH_XMLRECEIVER, ReceiverXML.ID, ReceiverXML) == true)                    //{                    //    _Data.LIST_XMLRECEIVER_ID.Add(ReceiverXML.ID);                    //}                }                return true;            }            catch            {                return false;            }        }    }}
 |