C#

C#으로 xml 문서 생성 및 해당 노드를 찾아 데이터 변경

이노(inno) 2009. 6. 13. 16:40

일단 질문자께서

XML에 대한 개념을 알고 계시다는 가정하에 코드 위주로 쓰겠습니다!!

질문의 내용을 유추해 보아...XML 관련 클래스의 사용법에 대해 헷갈리시는 것 같네요 :)

 

        private XmlDocument _xmlDoc;

// XmlDocument 말 그대로 XML문서를 담는 클래스 입니다.

        private void Event(string sender)

// 이벤트 메서드 입니다. 질문자 님께서 "계속 해서 어떤 데이터가 들어오게 됩니다.." 부분에,

// 데이터가 들어올때 이 메서드가 실행되도록 연결시켜 주면 될 것 같습니다.

        {

            if (_xmlDoc == null)

// 비교 부분입니다. xml파일을 새로 만들어야 하는지 기존의 것을 써야하는지 부분을 가릅니다.

// _xmlDoc == null 로 비교한 것은 위에서 전역변수 _xmlDoc 이 아직 객체화가 되지 않았음을

// 비교해 주고자 함 입니다. 프로그램 실행시 XML문서는 초기화 되는 것으로 보았습니다.

// (아닌가요? ^^)

            {

                try

                {

                    _xmlDoc = new XmlDocument();

// 이젠 인스턴스화 시킵니다. 이 순간부터 위의 if문에서 "false" 즉 else쪽으로 넘어값니다.

                    _xmlDoc.LoadXml("<root>" + "</root>");

                    _xmlDoc.Save("test.xml");

// 문서를 '대충' 만들고 (상위 엘레먼트는 root로 두었습니다) 파일로 저장합니다.

                }

                catch {}

            }

            else

            {

                XmlDocument _xmlModifier = new XmlDocument();

// 수정할 부분입니다. _xmlModifier라는 xmlDocument를 만들었고요.

                try

                {

                    _xmlModifier.Load("test.xml");

// 기존 만들었던 test.xml를 불러와 _xmlModifier에 담구요.

                    XmlNode _root = _xmlModifier.DocumentElement;

// xmlNode는 노드 즉 위치!를 나타냅니다.(XSLT에 대해서는 아시리라...)

// _root 에 _xmlModifier의 루트 엘레먼트를 가리키게 해 줍니다.

                    XmlElement _element = _xmlModifier.CreateElement("description");

// 새로운 엘레멘트를 만들어 보고요.

                    _element.InnerText = "Insert Data Here";

// 내용도 적어주고요.

                    _root.AppendChild(_element);

// 적용! 되겠습니다. _root 는 _xmlModifier의 루트를 가리키죠? 루트에 AppendChild 즉

// 하위 요소로 (_element) 를 넣는다. 입니다. 아까전 만든 <description> 과 내용이 들어가겠죠.

                    _xmlModifier.Save("test.xml");

// 그리고 다시 저장(덮어씌우기)해주면..끝 :)

                }

                catch {}

            }

        }

 

이정도만 짜 보았는데요. 도움이 되셨으면 좋겠습니다. :)

 

결과는요?

<root>
  <description>Insert Data Here</description>
  <description>Insert Data Here</description>
</root>

 

다음과 같이 나오겠죠. :)