..

Search

22) 노드의 조작

노드의 조작


노드의 값 확인

nodeValue 프로퍼티를 사용하면 특정 노드의 값을 확인할 수 있습니다.

또한, getAttribute() 메소드는 속성 노드의 속성값을 반환해 줍니다.

getAttributeNode() 메소드는 특정 노드에 포함된 속성 노드 그 자체를 반환해 줍니다.

 

다음 예제는 첫 번째 <priority>요소 노드의 첫 번째 자식 노드의 값을 확인하는 예제입니다.

예제

xmlObj = xmlHttp.responseXML// 요청한 데이터를 XML DOM 객체로 반환함.

// 첫 번째 <priority>요소의 첫 번째 자식 노드를 반환함.

targetNode = xmlObj.getElementsByTagName("priority")[0].firstChild;

코딩연습 ▶

 

이번 수업의 예제에서 사용되는 programming_languages.xml 파일의 코드는 다음과 같습니다.


노드의 값 변경

nodeValue 프로퍼티를 사용하면 특정 노드의 값을 변경할 수 있습니다.

또한, setAttribute() 메소드는 속성 노드의 속성값을 변경할 수 있게 해줍니다.


요소 노드의 텍스트

요소 노드는 자신이 직접 텍스트값을 가지지는 않습니다.

요소 노드의 텍스트는 요소 노드의 자식 노드인 텍스트 노드(text node)에 저장됩니다. 

따라서 요소 노드의 텍스트 값을 확인하거나 변경하고자 할 때는 요소 노드에 포함된 텍스트 노드에 접근해야 합니다.


텍스트 노드의 값 변경

nodeValue 프로퍼티를 사용하여 텍스트 노드의 값을 변경할 수 있습니다.

 

다음 예제는 첫 번째 <priority>요소 노드의 첫 번째 자식 노드의 값을 "low"로 변경하는 예제입니다.

예제

xmlObj = xmlHttp.responseXML// 요청한 데이터를 XML DOM 객체로 반환함.

// 첫 번째 <priority>요소의 첫 번째 자식 노드를 반환함.

targetNode = xmlObj.getElementsByTagName("priority")[0].firstChild;

targetNode.nodeValue = "low"; // nodeValue 속성을 이용하여 텍스트 노드의 값을 변경함.

코딩연습 ▶


속성 노드의 값 변경

nodeValue 프로퍼티뿐만 아니라 setAttribute() 메소드를 사용하면 속성 노드의 값을 변경할 수 있습니다.

setAttribute() 메소드는 속성값을 변경하려는 속성이 존재하지 않으면, 먼저 해당 속성을 생성한 후에 속성값을 설정합니다.

 

다음 예제는 세 번째 <name>요소 노드의 "korean" 속성값을 "자바스크립트"로 변경하는 예제입니다.

예제

xmlObj = xmlHttp.responseXML; // 요청한 데이터를 XML DOM 객체로 반환함.

targetNode = xmlObj.getElementsByTagName("name")[2]; // 세 번째 <name>요소를 반환함.

// 해당 요소에 "korean" 속성의 속성값을 "자바스크립트"로 변경함.

targetNode.setAttribute("korean", "자바스크립트");

코딩연습 ▶


노드의 교체

replaceChild() 메소드를 사용하면 특정 노드 그 자체를 다른 노드로 바꿀 수 있습니다.


요소 노드의 교체

replaceChild() 메소드를 사용하면 기존의 요소 노드를 새로운 요소 노드로 교체할 수 있습니다.

 

replaceChild() 메소드의 원형은 다음과 같습니다.

원형

부모노드.replaceChild(새로운자식노드, 기존자식노드);

 

1. 새로운 자식 노드 : 자식 노드 리스트에 새롭게 추가할 요소 노드를 전달합니다.

2. 기존 자식 노드 : 자식 노드 리스트에서 제거할 요소 노드를 전달합니다.

 

다음 예제는 첫 번째 <name>요소 노드를 제거하고, 세 번째 <name>요소 노드를 첫 번째 <name>요소 노드의 자리로 옮기는 예제입니다.

예제

xmlObj = xmlHttp.responseXML;

nameList = xmlObj.getElementsByTagName("name"); // 모든 <name>요소를 선택함.

parentNode = nameList[0].parentNode;            // 첫 번째 <name>요소의 부모 요소를 선택함.

// 세 번째 <name>요소를 첫 번째 <name>요소 자리에 교체함.

parentNode.replaceChild(nameList[2], nameList[0]);

코딩연습 ▶

 

다음 그림은 위 예제의 동작을 순서대로 나타낸 그림입니다.

node replace


텍스트 노드의 데이터 대체

replaceData() 메소드를 사용하면 텍스트 노드의 텍스트 데이터를 바꿀 수 있습니다.

 

replaceData() 메소드의 원형은 다음과 같습니다.

원형

텍스트노드.replaceData(오프셋, 교체할문자수, 새로운데이터);

 

1. 오프셋(offset) : 오프셋 값은 0부터 시작하며, 기존 텍스트 데이터의 몇 번째 문자부터 교체할지를 전달합니다.

2. 교체할 문자 수 : 기존 텍스트 노드의 데이터로부터 교체할 총 문자 수를 전달합니다.

3. 새로운 데이터 : 새로이 삽입할 텍스트 데이터를 전달합니다.

 

다음 예제는 세 번째 <name>요소 노드의 텍스트 노드의 데이터에서 두 번째 문자부터 세 글자를 "Query"로 대체하는 예제입니다.

예제

xmlObj = xmlHttp.responseXML; // 요청한 데이터를 XML DOM 객체로 반환함.

// 세 번째 <name>요소의 텍스트 노드를 반환함.

javaName = xmlObj.getElementsByTagName("name")[2].firstChild;

// 텍스트 데이터의 두 번째 문자부터 세 글자를 "Query"로 대체함.

javaName.replaceData(1, 3, "Query");

코딩연습 ▶

 

replaceData() 메소드뿐만 아니라 nodeValue 프로퍼티를 이용해도 텍스트 노드의 데이터를 대체할 수 있습니다.


연습문제