4ad6b10750a0dcb0f713f0557737b7901e906a38.svn-base 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml;
  6. using System.IO;
  7. using System.Data;
  8. namespace IControls_FireManager
  9. {
  10. // XML 생성 및 처리는 여기 클래스에서 전담한다
  11. public static class _Xml
  12. {
  13. public static string Get_Value(string XML_Msg, string ElementName, string AttributeName)
  14. {
  15. try
  16. {
  17. TextReader stringReader = new StringReader(XML_Msg);
  18. XmlTextReader reader = new XmlTextReader(stringReader);
  19. if (XML_Msg == null || XML_Msg.Length == 0 || ElementName == null || ElementName.Length == 0) // null 값 허용안함
  20. {
  21. return null;
  22. }
  23. else if (AttributeName == null || AttributeName.Length == 0) // 태그값 내용만 가져오기
  24. {
  25. bool Get = false;
  26. while (reader.Read())
  27. {
  28. switch (reader.NodeType)
  29. {
  30. case XmlNodeType.Element:
  31. if (reader.Name == ElementName) Get = true;
  32. break;
  33. case XmlNodeType.Text:
  34. if (Get == true) return reader.Value.ToString();
  35. break;
  36. }
  37. }
  38. }
  39. else // 속성값 가져오기
  40. {
  41. while (reader.Read())
  42. {
  43. switch (reader.NodeType)
  44. {
  45. case XmlNodeType.Element:
  46. if (reader.Name == ElementName)
  47. {
  48. reader.MoveToAttribute(AttributeName);
  49. while (reader.ReadAttributeValue())
  50. return reader.Value.ToString();
  51. }
  52. break;
  53. }
  54. }
  55. }
  56. return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함.
  57. }
  58. catch (Exception e)
  59. {
  60. // LOG
  61. _Event.DebugView_SendMessage_Write(e.ToString());
  62. return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함
  63. }
  64. }
  65. public static string Get_Value(XmlTextReader reader, string ElementName, string AttributeName)
  66. {
  67. try
  68. {
  69. if (AttributeName == null || AttributeName.Length == 0) // 태그값 내용만 가져오기
  70. {
  71. bool Get = false;
  72. while (reader.Read())
  73. {
  74. switch (reader.NodeType)
  75. {
  76. case XmlNodeType.Element:
  77. if (reader.Name == ElementName) Get = true;
  78. break;
  79. case XmlNodeType.Text:
  80. if (Get == true) return reader.Value.ToString();
  81. break;
  82. }
  83. }
  84. }
  85. else // 속성값 가져오기
  86. {
  87. while (reader.Read())
  88. {
  89. switch (reader.NodeType)
  90. {
  91. case XmlNodeType.Element:
  92. if (reader.Name == ElementName)
  93. {
  94. reader.MoveToAttribute(AttributeName);
  95. while (reader.ReadAttributeValue())
  96. return reader.Value.ToString();
  97. }
  98. break;
  99. }
  100. }
  101. }
  102. return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함.
  103. }
  104. catch (Exception e)
  105. {
  106. // LOG
  107. _Event.DebugView_SendMessage_Write(e.ToString());
  108. return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함
  109. }
  110. }
  111. // XML 주석 (XMLComment)
  112. public static StringBuilder Set_XMLComment(string Comment)
  113. {
  114. StringBuilder strPacket = new StringBuilder();
  115. strPacket.Append("<!-- " + Comment + " -->\r\n");
  116. return strPacket;
  117. }
  118. // XML 생성 (XMLHeader)
  119. public static StringBuilder Set_XMLHeader()
  120. {
  121. StringBuilder strPacket = new StringBuilder();
  122. strPacket.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n");
  123. return strPacket;
  124. }
  125. // XML 생성 (BodyHeader)
  126. // Body_Type : 통신용, 시스템설정용으로 구분
  127. // head : 상위 및 하위
  128. public static StringBuilder Set_BodyHeader(Xml_Body_Type Body_Type,bool Head)
  129. {
  130. StringBuilder strPacket = new StringBuilder();
  131. switch(Body_Type)
  132. {
  133. case Xml_Body_Type.Program_Configuration:
  134. if (Head == true)
  135. strPacket.Append("<IControls_FireManager>\r\n");
  136. else
  137. strPacket.Append("</IControls_FireManager>");
  138. break;
  139. case Xml_Body_Type.TCPIP_Protocol:
  140. if (Head == true)
  141. strPacket.Append("<icse>\r\n");
  142. else
  143. strPacket.Append("</icse>");
  144. break;
  145. case Xml_Body_Type.FIRE_FieldSetting:
  146. if (Head == true)
  147. strPacket.Append("<FIELD_CONF>\r\n");
  148. else
  149. strPacket.Append("</FIELD_CONF>");
  150. break;
  151. case Xml_Body_Type.FIRE_Receiver:
  152. if (Head == true)
  153. strPacket.Append("<Project_Receiver>\r\n");
  154. else
  155. strPacket.Append("</Project_Receiver>");
  156. break;
  157. }
  158. return strPacket;
  159. }
  160. // XML 생성 (Body)
  161. // Key_Data 의 예시 "Key1=Data1;Key2=Data2"
  162. public static StringBuilder Set_Body(string Element_Name, string Element_Value, string KeyData, bool CarriageReturn)
  163. {
  164. try
  165. {
  166. StringBuilder strPacket = new StringBuilder();
  167. strPacket.Append("<" + Element_Name);
  168. // 속성 이름 임시 저장소
  169. string Temp_Names = _Convert.String_to_Key_Data(KeyData, true, true);
  170. // 제거 문자대로 분리시켜버림
  171. string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);
  172. // 속성 값 임시 저장소
  173. string Temp_Values = _Convert.String_to_Key_Data(KeyData, false, true);
  174. // 제거 문자대로 분리시켜버림
  175. string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);
  176. // 개수만큼 만들어서 속성 값 생성
  177. for (int i = 0; i < Column_Names.Length; i++)
  178. strPacket.Append(" " + Column_Names[i] + "=" + "\"" + Column_Values[i] + "\"");
  179. // 마무리
  180. strPacket.Append("/>");
  181. //strPacket.Append(Element_Value);
  182. //strPacket.Append("</" + Element_Name + ">");
  183. if (CarriageReturn == true) strPacket.Append("\r\n");
  184. return strPacket;
  185. }
  186. catch (Exception e)
  187. {
  188. // LOG
  189. _Event.DebugView_SendMessage_Write(e.ToString());
  190. return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함
  191. }
  192. }
  193. // 사용 예시 "Key1:Key2,"Data1:Data2"
  194. public static StringBuilder Set_Body(string charsTrim, string Element_Name, string Element_Value, string Attribute_Name, string Attribute_Value, bool CarriageReturn)
  195. {
  196. StringBuilder strPacket = new StringBuilder();
  197. strPacket.Append("<" + Element_Name);
  198. // 구분자 설정
  199. char[] charsToTrim = { Convert.ToChar(charsTrim) };
  200. // 속성 이름 임시 저장소
  201. string Temp_Names = Attribute_Name;
  202. // 제거 문자대로 분리시켜버림
  203. string[] Attribute_Names = Temp_Names.Split(charsToTrim);
  204. // 속성 값 임시 저장소
  205. string Temp_Values = Attribute_Value;
  206. // 제거 문자대로 분리시켜버림
  207. string[] Attribute_Values = Temp_Values.Split(charsToTrim);
  208. // 개수만큼 만들어서 속성 값 생성
  209. for (int i = 0; i < Attribute_Names.Length; i++)
  210. strPacket.Append(" " + Attribute_Names[i] + "=" + "\"" + Attribute_Values[i] + "\"");
  211. // 마무리
  212. strPacket.Append("/>");
  213. //strPacket.Append(Element_Value);
  214. //strPacket.Append("</" + Element_Name + ">");
  215. if (CarriageReturn == true) strPacket.Append("\r\n");
  216. return strPacket;
  217. }
  218. // 특별 용도
  219. // 상위에 있는 함수와는 별개로 끝나지 않는 태그로 구성
  220. // ex) <Field Receiver_ID="1" ID="0" Name="메인" IMAGE="HOME.jpg">
  221. public static StringBuilder Set_Body_NotEnd(string Element_Name, string Element_Value, string KeyData, bool CarriageReturn)
  222. {
  223. try
  224. {
  225. StringBuilder strPacket = new StringBuilder();
  226. strPacket.Append("<" + Element_Name);
  227. // 속성 이름 임시 저장소
  228. string Temp_Names = _Convert.String_to_Key_Data(KeyData, true, true);
  229. // 제거 문자대로 분리시켜버림
  230. string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);
  231. // 속성 값 임시 저장소
  232. string Temp_Values = _Convert.String_to_Key_Data(KeyData, false, true);
  233. // 제거 문자대로 분리시켜버림
  234. string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);
  235. // 개수만큼 만들어서 속성 값 생성
  236. for (int i = 0; i < Column_Names.Length; i++)
  237. strPacket.Append(" " + Column_Names[i] + "=" + "\"" + Column_Values[i] + "\"");
  238. // 마무리
  239. strPacket.Append(">");
  240. //strPacket.Append(Element_Value);
  241. //strPacket.Append("</" + Element_Name + ">");
  242. if (CarriageReturn == true) strPacket.Append("\r\n");
  243. return strPacket;
  244. }
  245. catch (Exception e)
  246. {
  247. // LOG
  248. _Event.DebugView_SendMessage_Write(e.ToString());
  249. return null; // 중간에 리턴값이 없다면 (해당조건을 검색하지 못하면) Null 리턴함
  250. }
  251. }
  252. // 상위에 있는 함수와는 별개로 끝나지 않는 태그를 읽기
  253. public static bool Read_Receiver_XML(string ProjectPath)
  254. {
  255. try
  256. {
  257. // 일반 텍스트로 읽고
  258. string xml = File.ReadAllText(ProjectPath);
  259. System.IO.StringReader reader = new StringReader(xml);
  260. // 데이타셋
  261. DataSet ds = new DataSet();
  262. // XML 파일을 인코딩
  263. ds.ReadXml(reader, XmlReadMode.Auto);
  264. // 데이타셋의 테이블 두번째 바디부터 행별로 가져온다
  265. DataRowCollection rows = ds.Tables[0].Rows;
  266. // 클래스를 각각 해쉬에 추가
  267. foreach (DataRow row in rows)
  268. {
  269. //_ReceiverXML ReceiverXML = new _ReceiverXML();
  270. //ReceiverXML.ID = row["ID"].ToString();
  271. //ReceiverXML.IP = row["IP"].ToString();
  272. //ReceiverXML.KEY_NAME = row["NAME"].ToString();
  273. //// 해쉬 추가
  274. //if (_Hash.Add(_Data.HASH_XMLRECEIVER, ReceiverXML.ID, ReceiverXML) == true)
  275. //{
  276. // _Data.LIST_XMLRECEIVER_ID.Add(ReceiverXML.ID);
  277. //}
  278. }
  279. return true;
  280. }
  281. catch
  282. {
  283. return false;
  284. }
  285. }
  286. }
  287. }