프로그래밍/.Net

[본문스크랩] .NET에서 XML활용 DOM 객체 활용-3 XML문서에 노드들추가하기

강태공97 2014. 1. 17. 21:03

XML문서 추가하기

 

XML문서를 DOM객체(메모리에 캐쉬된XML문서)로 만든 후 추가 할때는

정말 새로운 내용만 추가하는 것이 아니라 전체를 다시 덮어 쓴다고 보면 된다.

이것이 가능한 이유는 메모리에 캐쉬 되어있기 때문이다. 메모리에 문서 구조대로

캐쉬가 되어있으니 그 DOM객체에 추가를 하면 메모리에 추가한것이 되고

결국 메모리에 적재된 대로 다시 덮어써주기만 하면 마치 추가된것 처럼 문서가

새로 작성 된다.

 

아래 예제에서 책제목이 'XML 프로그래밍'이라는 새로운 노드를 추가해 보겠다.

구분짓기 위해 색깔을 다양하게 줬다.

XmlDocument doc = new XmlDocument();
doc.Load(pathURI);

// 최상위 엘리먼트 : booklist
XmlElement ebooklist = doc.DocumentElement;
// 새로운 book 엘리먼트 생성
XmlElement eBook= doc.CreateElement("book");
//1.id,kind속성 추가
eBook.SetAttribute("id", "b005");
eBook.SetAttribute("kind", "컴퓨터");
//2.title 엘리먼트를 eBook 추가
XmlElement eTitle= doc.CreateElement("title");
XmlText txtTitle= doc.CreateTextNode("XML 프로그래밍");
eTitle.AppendChild(txtTitle);
eBook.AppendChild(eTitle);
//3. author 엘리먼트를 eBook 추가
XmlElement eAuthor = doc.CreateElement("author");
XmlText txtAuthor= doc.CreateTextNode("장동건이");
eAuthor .AppendChild(txtAuthor);
eBook.AppendChild(eAuthor );
//4. price 엘리먼트를 eBook에 추가
XmlElement ePrice = doc.CreateElement("price");
ePrice .SetAttribute("unit", "원");
XmlText txtPrice = doc.CreateTextNode("20000");
ePrice .AppendChild(txtPrice);
eBook.AppendChild(ePrice);
//엘리먼트추가
ebooklist.AppendChild(eBook);
//저장
//System.IO추가
StringWriter sw=new StringWriter();
doc.Save(sw);//콘솔창에 결과 보기 위해 스트림형태로....
Console.WriteLine(sw.ToString());
sw.Close();

ebooklist : 루트 엘리먼트를 booklist변수에 담았다.

SetAttribute함수를 이용해문서(doc)객체에 'book'이라는 이름의 객체를 만들었다.

'book'엘리먼트에 id,kind 속성을 주고 각각 값을 b005,컴퓨터 로 설정했다.

'title'이라는 이름으로 doc(DOM객체)에 엘리먼트를 만들어 그 객체를 eTitle에 담았다.

'eTitle'의 텍스트노드(내용(컨텐츠))를 만들기 위해 CreateTextNode()함수를 이용하였다. 만들어진 텍스트 노드를 'eTitle'의 자식으로 넣어주기 위해 AppendChild()함수를 사용했다.그렇게 텍스트노드까지 설정된 'eTitle'를 'eBook'의 자식으로 넣어줬다.

아래는 모두 같은 코딩의 반복이다. 엘리먼트를 만들고 자식이 있으면 자식을 만들고 속성이 있으면 속성을 만들고 텍스트가 있으면 텍스트를 만들고 각각 해당하는 엘리먼트의 자식으로만 추가시키면 된다. 끝

여기서 StringWirter를 썼지만 이는 간단히 콘솔창에서 보기 위함이다. 굳이 이렇게 하지 않고 Save()함수 인자로 경로를 문자열로 넣어주면 해당 경로에 파일을 생성할 수 있다.이 외에도 2가지 오버로드가 더 있으니 MSDN을 참고하면 되겠다.

예)

doc.Save(@"c:\booklistTestAdd.xml");

 

출력결과)

 

콘솔,파일 모두 제대로 추가 된것을 확인 할 수 있다