프로그래밍/.Net

[본문스크랩] .NET에서 XML활용 DOM객체 활용-1 DOM객체의 프로퍼티,함수들과 계층구조

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

DOM

전체 xml 문서가 메모리 캐시 된것(Document Object Model)이라 하고 DOM을
사용해서 편집과 검색 XML문서 작성 등을 가능하게 한다.
.NET Framework에서 XmlDocument 클래스 제공.

 

 

예제용 XML문서

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE booklist SYSTEM "booklist.dtd">
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

 

기본적인 DOM객체 생성 및 루트 엘리먼트와 루트엘리먼트의 속성값들

public string pathURI=@"..\..\files\booklist.xml";

private void btnDomEx01_Click(object sender, EventArgs e)
{

XmlDocument xmldoc = new XmlDocument();

xmldoc.Load(pathURI);

//xmldoc.LoadXml();

// 루트엘리먼트 : booklist 얻어오기
XmlElement rootElement = xmldoc.DocumentElement;

Console.WriteLine(rootElement.Name);
Console.WriteLine(rootElement.LocalName);
Console.WriteLine(rootElement.NamespaceURI);

}

XmlDocument() 생성자로 루트노드 즉 문서 자체를 가르키는 루트노드를 뜻한다.

 

Load(URL) 지정된 URL에서 XML 문서를 로드해 노드들을 만든다.

DocumentElement 루트 엘리먼트를 의미하며 여기서는 booklist가 된다.

Name속성은 현재 엘리먼트의 이름값을 갖는 속성이다

LocalName접두사를 제거한 현재 노드의 이름이다.예를 들어, <bk:book> 요소에서 LocalName은 book이다.

NamespaceURI는 엘리먼트에 네임스페이스 참조가 있을 경우에 그 네임스페이스를 값을 가지는 속성이다.

 

마지막 자식 찾기(자식이름출력)

XmlElement firstBook= rootElement.FirstChild as XmlElement Console.WriteLine(firstBook.Name);

형반환을 굳이 안해주고

rootElement.FirstChild.Name을 해줘도

같은결과가 나온다.

굳이 해준 이유는 XmlNode가 XmlElement의 부모클래스 이기 때문에 이런식으로 다운 캐스팅이 가능하다는 것을 보여주기 위해서이다.

아래에 클래스 계층구조가 있으니 참고하시길~

 

자식노드를 가져올 수 있는 속성들

현제엘리먼트.FirstChild

첫 번째 자식을 가르킨다(속성자료형 XmlNode)

자식엘리먼트 1을 가지고 있음

현제엘리먼트.LastChild

마지막 자식을 가르킨다(속성자료형 XmlNode)

자식엘리먼트 5를 가지고 있음

현제엘리먼트.FirstChild.NextSibling

첫 번째 자식의 형제노드를 가르킨다(속성자료형 XmlNode)

자식엘리먼트1의 다음 형제인 자식엘리먼트2를 가지고 있음

현제엘리먼트.Lastchild.PrevioustSibling

첫 번째 자식을 가르킨다(속성자료형 XmlNode)

자식엘리먼트4의 이전 형제인 자식엘리먼트3을 가르킴

현제엘리먼트.ChildNodes

현제 엘리먼트의 자식을 가르킨다(속성자료형 XmlNodeList)

자식엘리먼트1,2,3,4 모두를 가지고 있음

컬렉션이기 때문에 ChildNodes[인덱스값]으로 노드들을 하나씩 가져올 수도 있다

 

 

 

 

 

XmlElement의 상속 계층구조

 

 

속성관련

XmlElement.HasAttributes

해당엘리먼트의 속성이 있는지 true/false값을 반환

XmlElement.Attributes.Count;

해당엘리먼트의 속성의 갯수가 몇개인지 int형으로 반환

XmlElement.GetAttribute("속성명")

해당엘리먼트의 속성이 "속성명"과 같은 속성의 값을 반환

XmlElement.Attributes

해당엘리먼트의 속성들의 컬렉션을 반환(XmlAttributeCollection)