C#/C# WPF 실무
[C# WPF] XML 에서 자식 노드 명과 자식 노드 값 가져오기
냠냠쿠
2023. 9. 11. 11:57
728x90
- xml파일
<메서드명>
<Parameters>
<파라미터명1>test</파라미터명1>
<파라미터명2> 1</파라미터명2>
</Parameters>
- 클래스파일
public List<string> getQuery(string path, string queryName)
{
// path 가져오기
string _path = path;
// xml 연결
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(_path);
// xml에서 쿼리값 가져오기
XmlNode ctg_node = xmlDoc.SelectSingleNode(queryName);
XmlNode name_node = xmlDoc.SelectSingleNode(queryName + "/Query");
List<string> xmlQuery = new List<string>();
xmlQuery.Add(name_node.InnerText);
// xml에서 파라미터값 가져오기
XmlNode parameters = xmlDoc.SelectSingleNode(queryName + "/Parameters");
if ( parameters != null && parameters.HasChildNodes==true)
{
XmlNodeList parameterList = parameters.ChildNodes;
foreach (XmlNode parameter in parameterList)
{
//파라미터 이름 가져오기
string paramName = parameter.Name;
//파라미터 값 가져오기
string paramValue = parameter.InnerText;
xmlQuery.Add(paramName);
xmlQuery.Add(paramValue);
}
}
return xmlQuery;
xml에서 쿼리 + 파라미터를 다 가져와야하는데, 메서드를 두개 만들자니 받아오는 파라미터 값이 같아서 한 메서드에서 모두 받아올 수 있도록 구현하고 싶었다. 배열을 쓰자니 너무 많이 갈아엎어야 해서 List를 사용했다.
List에서 가장 첫 번째 인덱스인 0에는 쿼리를 담아주고, 그 위 파라미터 명과 값을 차례대로 넣어줬다.
그리고 파라미터는 파라미터 태그가 있는것만 가져오고, 없으면 뛰어넘어가야했음.
if문에 parameters.ChildNodes == true
로 했더니 자꾸 오류가 나서 챗gpt에게 물어봤더니 그 바로 윗줄 parameters 변수가 null인경우도 체크 해 주어야한다그래서 if문에 parameters != null
을 추가 해 주었다.
- 리턴값을 받은 클래스파일
try
{
#region [Oracle 연결]
using (_connection = new OracleConnection(oradb))
{
//sql 실행
_connection.Open();
//sql문 실행
OracleCommand cmd = query.connectionDB(xmlQuery[0], _connection);
if (1 < xmlQuery.Count)
{
for(int i=1; i< xmlQuery.Count; )
{
cmd.Parameters.Add(new OracleParameter(xmlQuery[i], xmlQuery[i + 1]));
i += 2;
}
}
- List에서 고정적으로 쿼리는 반드시 들어가기때문에 쿼리는 리스트의 인덱스 0번을 넣어준다.
- 파라미터를 넣는 함수는 cmd.Parameters.Add(new OracleParameter ( "파라미터이름", 파라미터 값) ;
의 형태로 사용 해 주는데,
그 다음 부터는 파라미터이름, 파라미터값, 이름, 값, 이름, 값 ...
이 반복되기 때문에 for문 의 i를 1부터 시작하고, new OracleParameter( 리스트[i], 리스트[i+1] ) 로 가져온 뒤 i의 증가값을 2씩 설정 해 주었다.
728x90