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("\r\n");
return strPacket;
}
// XML 생성 (XMLHeader)
public static StringBuilder Set_XMLHeader()
{
StringBuilder strPacket = new StringBuilder();
strPacket.Append("\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("\r\n");
else
strPacket.Append("");
break;
case Xml_Body_Type.TCPIP_Protocol:
if (Head == true)
strPacket.Append("\r\n");
else
strPacket.Append("");
break;
case Xml_Body_Type.FIRE_FieldSetting:
if (Head == true)
strPacket.Append("\r\n");
else
strPacket.Append("");
break;
case Xml_Body_Type.FIRE_Receiver:
if (Head == true)
strPacket.Append("\r\n");
else
strPacket.Append("");
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)
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;
}
}
}
}