본문 바로가기

   
Programming/XML

XML DOM

반응형


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml;//C#에서 XML을 다룰수 있도록하는 조작 클래스들이 있음.

      

namespace ConsoleEx

{

       class Ex14_DOM

       {

             static void Main(string[] args)

             {

                    //DOM(Document Object Model)

                    //     - Javascript DOM : 브라우저에서

                    //     - C# DOM : 브라우저를 제외한 윈폼, 웹폼, 서비스....

 

                    //C#으로  XML 조작

                    // 1. SAX(StreamReader ... 방식)

                    // 2. DOM

 

                    //DOM 처리순서

                    // 1. 문서를 읽기(문서 전체를 한번에...)

                    // 2. 문서내의 구성요소(엘리먼트, 속성, PCDATA, 엔티티, 주석, 처리지시문 등..)을 객체로 생성해서

                    //     부모자식 관계를 형성시킨다.(트리구조를 만듦) ************************

                    // 3. 메모리상의 트리구조를 통해서 원하는 요소에 접근, 조작(읽기, 수정, 삭제, 추가 등...)

 

                    //DOM의 장점

                    // 1. 조작 편함

                    // 2. 원하는 노드 접근 용이

                    // 3. 속도 빠름

                    // 4. 같은 요소를 반복해서 접근해도 용이함..

                    // 5. XPath지원(XML 검색 언어)

 

                    //DOM 단점

                    // 1. 무거움(문서 전체를 Object화 로드...)

 

                    //address.xml 읽기

                    // 1. 문서 매핑 객체 생성(문서와 동등한 역할 객체)

                    //     - 실제 xml를 총괄

                    //     - 문서의 구조를 조작(생성, 삭제)

                    XmlDocument doc = new XmlDocument();

 

                    // 2. 읽기(전체)  **********

                    // 경로: 부모폴더의 부모폴더로 이동

                    doc.Load(@"..\..\address.xml");

 

                    // 3. 조작

                    // OuterXml : 현재 객체를 포함해서 자식들이 가지고 있는 모든 Xml 코드를 문자열로 반환

                    // InnerXml : 현재 객체를 포함하지 않고 자식들이 가지고 있는 모든 Xml 코드를 문자열로 반환

                    //Console.WriteLine(doc.OuterXml);

                    Console.WriteLine(doc.InnerXml);

             }

       }

}

 



 

2번째 DOM



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml; //@@@

 

namespace ConsoleEx

{

       class Ex15_DOM

       {

             static void Main(string[] args)

             {

                    //DOM -> (조건)미리 XML파일의 구조와 의미 파악

 

                    //0. 파일에서 읽어와서 객체 doc에 저장

                    XmlDocument doc = new XmlDocument();

                    doc.Load(@"..\..\address.xml");

 

                    //기본 클래스

                    // 1. 엘리먼트(태그) -> XmlElement

                    // 2. 속성 -> XmlAttribute

                    // 3. PCDATA -> XmlText

                    // 4. 주석 -> XmlComment

                    // 5. XmlNode -> object와 비슷함. 대부분의 부모 클래스 역할을 함(XmlElement, XmlText로 다운캐스팅 해야 함)

            

                    //1. 문서의 루트 엘리먼트 저장(그러나, 하위의 모든 엘리먼트들도 가지고 있다.)

                    XmlElement root = doc.DocumentElement;

                    Console.WriteLine(root.Name);//최상위 "주소록" 엘리먼트명 출력

 

                   

 

                    //2. 자식 엘리먼트 접근

                    //     -  firstChild. lastChild, childNodes

                    //XmlNode m1 = root.ChildNodes[0];

                    XmlElement m1 = (XmlElement)root.ChildNodes[0]; //회원

 

                    Console.WriteLine(m1.Name);

                    //Console.WriteLine(m1.OuterXml);

 

                    //3. 첫번째 자식에 접근

                    //XmlElement name = (XmlElement)m1.ChildNodes[0];

                    XmlElement name = (XmlElement)m1.FirstChild;//이름               

                    Console.WriteLine(name.Name);                

                    //3. PCDATA에 접근 방법1               

                    Console.WriteLine(name.InnerText);

 

                   

                    //3. PCDATA에 접근 방법2; 위와 같은 결과.

                    XmlText txt = (XmlText)name.FirstChild;             

                    Console.WriteLine(txt.Value);// 이럴때는 txt도 엘리멘트로 보기때문에innetText대신에 .Value도 됨

 

                    //1번째 자식

                    //m1.ChildNodes[i]

 

                    //1번째 자식

                    //m1.FirstChild

 

                    //막내자식

                    //m1.LastChild

 

                    Console.WriteLine();

                    //형제 NextSibling;다음형제 PreviousSibling;이전형제

                    //XmlElement m2 = root.ChildNodes[1] as XmlElement;

                    XmlElement m2 = m1.NextSibling as XmlElement;

                    Console.WriteLine(m2.FirstChild.InnerText);

 

                    //m2.PreviousSibling //이전형제

 

                    //부모

                    XmlElement 주소록 = m1.ParentNode as XmlElement;

                    Console.WriteLine(주소록.Name);

                   

                          

                   

      

             }

       }

}

 

 



반응형