XML DOM 노드 접근

DOM을 통해 XML 문서의 모든 노드에 접근할 수 있습니다.

노드 접근

노드에 접근할 수 있는 방법은 세 가지입니다:

  • getElementsByTagName() 메서드를 사용하여
  • 노드 트리를 순회(순회)하여 탐색
  • 노드 관계를 활용하여 노드 트리에서 탐색

getElementsByTagName() 메서드

getElementsByTagName() 지정된 태그 이름을 가진 모든 요소를 반환합니다.

문법

node.getElementsByTagName("tagname");

예제

다음 예제는 x 요소 아래의 모든 <title> 요소를 반환합니다:

x.getElementsByTagName("title");

주의하세요, 위의 예제는 x 노드 아래의 <title> 요소만 반환합니다. XML 문서에 있는 모든 <title> 요소를 반환하려면 다음과 같이 사용하세요:

xmlDoc.getElementsByTagName("title");

여기서는,xmlDoc 즉 문서 자체(문서 노드).

DOM 노드 목록

getElementsByTagName() 方法返回节点列表(node list)。节点列表是节点的数组。

method returns a node list (node list). 노드 목록은 노드의 배열입니다.

메서드는 노드 목록(node list)을 반환합니다. 노드 목록은 노드의 배열입니다.

x = xmlDoc.getElementsByTagName("title");

y = x[2];주의:

본인이 직접 시도해보세요

인덱스는 0에서 시작합니다.

length DOM 노드 목록 길이

속성을 사용하여 노드 목록의 길이(노드 수)를 정의할 수 있습니다. length 속성을 사용하여 노드 목록을 반복적으로 탐색할 수 있습니다:

예제

var x = xmlDoc.getElementsByTagName("title");
for (i = 0; i < x.length; i++) {
  // 각 노드를 처리하는 코드를 여기에 작성할 수 있습니다
  }

본인이 직접 시도해보세요

노드 타입

XML 문서의 documentElement 속성은 루트 노드입니다.

속성은 노드의 nodeName 속성은 노드 이름입니다.

속성은 노드의 nodeType 속성은 노드의 타입입니다.

이 튜토리얼의 다음 장에서 노드 속성에 대해 더 알 수 있습니다.

본인이 직접 시도해보세요

노드 탐색

아래 코드는 루트 노드의 자식 노드(요소 노드)를 반복적으로 탐색합니다:

예제

txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length; i++) {
  // 요소 노드(타입 1)만 처리
  if (x[i].nodeType == 1) {
    txt += x[i].nodeName + "<br>";
  }
}

본인이 직접 시도해보세요

예제 설명:

  1. " 을(를) 로드했는지 확인하세요books.xml" 로 로드된 xmlDoc
  2. 루트 요소(xmlDoc)의 자식 노드를 가져옵니다
  3. 각 자식 노드의 노드 타입을 확인합니다. 노드 타입이 "1"이면 요소 노드입니다
  4. 요소 노드이면, 노드 이름을 출력합니다

노드 관계 탐색

아래 코드는 노드 관계를 활용하여 노드 트리에서 탐색합니다:

예제

x = xmlDoc.getElementsByTagName("book")[0];
xlen = x.childNodes.length;
y = x.firstChild;
txt = "";
for (i = 0; i < xlen; i++) {
  // 요소 노드(타입 1)만 처리
  if (y.nodeType == 1) {
    txt += y.nodeName + "<br>";
  }
  y = y.nextSibling;
}

본인이 직접 시도해보세요

예제 설명:

  1. " 을(를) 로드했는지 확인하세요books.xml" 로 로드된 xmlDoc
  2. 첫 번째 book 요소의 자식 노드를 가져오기
  3. "y" 변수를 첫 번째 book 요소의 첫 번째 자식 노드로 설정합니다
  4. 각 자식 노드(첫 번째 자식 노드 "y" 시작):
  5. 각 자식 노드의 노드 타입을 확인합니다. 노드 타입이 "1"이면, 그것은 요소 노드입니다
  6. 요소 노드라면, 해당 노드의 이름을 출력합니다
  7. "을 설정합니다y" 변수를 다음 동급 노드로 설정하고 다시 루프를 실행합니다