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;
- }
- }
- }
- }
|