XML DOM-노드 교체

이 장에서는 XML DOM 객체에서 노드 교체 작업에 대해 알아 봅니다. 우리가 알고 있듯이 DOM의 모든 것은 노드로 알려진 계층 적 정보 단위에서 유지되며 교체 노드는 이러한 지정된 노드 또는 텍스트 노드를 업데이트하는 또 다른 방법을 제공합니다.

다음은 노드를 교체하는 두 가지 방법입니다.

  • replaceChild()
  • replaceData()

replaceChild ()

replaceChild () 메서드 는 지정된 노드를 새 노드로 바꿉니다.

통사론

insertData () 구문은 다음과 같습니다.

Node replaceChild(Node newChild, Node oldChild) throws DOMException

어디,

  • newChild- 자식 목록에 넣을 새 노드입니다.

  • oldChild- 목록에서 교체되는 노드입니다.

  • 이 메서드는 교체 된 노드를 반환합니다.

다음 예제 (replacenode_example.htm)는 XML 문서 ( node.xml )를 XML DOM 객체로 구문 분석 하고 지정된 노드 <FirstName>을 새 노드 <Name>으로 바꿉니다.

<!DOCTYPE html>
<html>
   <head>
      <script>
         function loadXMLDoc(filename) {
            if (window.XMLHttpRequest) {
               xhttp = new XMLHttpRequest();
            } else // code for IE5 and IE6 {
               xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET",filename,false);
            xhttp.send();
            return xhttp.responseXML;
         }
      </script>
   </head>
   <body>
      <script>
         xmlDoc = loadXMLDoc("/dom/node.xml");

         x = xmlDoc.documentElement;

         z = xmlDoc.getElementsByTagName("FirstName");
         document.write("<b>Content of FirstName element before replace operation</b><br>");
         for (i=0;i<z.length;i++) {
            document.write(z[i].childNodes[0].nodeValue);
            document.write("<br>");
         }
         //create a Employee element, FirstName element and a text node
         newNode = xmlDoc.createElement("Employee");
         newTitle = xmlDoc.createElement("Name");
         newText = xmlDoc.createTextNode("MS Dhoni");

         //add the text node to the title node,
         newTitle.appendChild(newText);
         //add the title node to the book node
         newNode.appendChild(newTitle);

         y = xmlDoc.getElementsByTagName("Employee")[0]
         //replace the first book node with the new node
         x.replaceChild(newNode,y);

         z = xmlDoc.getElementsByTagName("FirstName");
         document.write("<b>Content of FirstName element after replace operation</b><br>");
         for (i = 0;i<z.length;i++) {
            document.write(z[i].childNodes[0].nodeValue);
            document.write("<br>");
         }
      </script>
   </body>
</html>

실행

이 파일을 서버 경로에 replacenode_example.htm으로 저장하십시오 (이 파일과 node.xml은 서버의 동일한 경로에 있어야 함). 아래와 같이 출력을 얻습니다.

Content of FirstName element before replace operation
Tanmay
Taniya
Tanisha

Content of FirstName element after replace operation
Taniya
Tanisha

replaceData ()

replaceData () 메서드는 지정된 16 비트 단위 오프셋에서 시작하는 문자를 지정된 문자열로 바꿉니다.

통사론

replaceData () 구문은 다음과 같습니다.

void replaceData(int offset, int count, java.lang.String arg) throws DOMException

어디

  • 오프셋 -교체를 시작할 오프셋입니다.

  • count- 교체 할 16 비트 단위의 수입니다. 오프셋과 카운트의 합이 길이를 초과하면 데이터 끝까지 모든 16 비트 단위가 교체됩니다.

  • ARG - 의 DOMString 의 범위와 옮겨 놓을 수있는.

다음 예제 (replacedata_example.htm)는 XML 문서 ( node.xml )를 XML DOM 객체로 구문 분석하고 이를 대체합니다.

<!DOCTYPE html>
<html>
   <head>
      <script>
         function loadXMLDoc(filename) {
            if (window.XMLHttpRequest) {
               xhttp = new XMLHttpRequest();
            } else // code for IE5 and IE6 {
               xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET",filename,false);
            xhttp.send();
            return xhttp.responseXML;
         }
      </script>
   </head>
   <body>
      <script>
         xmlDoc = loadXMLDoc("/dom/node.xml");

         x = xmlDoc.getElementsByTagName("ContactNo")[0].childNodes[0];
         document.write("<b>ContactNo before replace operation:</b> "+x.nodeValue);
         x.replaceData(1,5,"9999999");
         document.write("<br>");
         document.write("<b>ContactNo after replace operation:</b> "+x.nodeValue);

      </script>
   </body>
</html>

위의 예에서-

  • x.replaceData (2,3, "999"); − 여기서 x 는 지정된 요소 <ContactNo>의 텍스트를 포함하며 텍스트가 새 텍스트 "9999999" 로 대체되며 위치 1 부터 시작하여 5 길이까지 입니다.

실행

이 파일을 서버 경로에 replacedata_example.htm 으로 저장하십시오 (이 파일과 node.xml은 서버의 동일한 경로에 있어야 함). 아래와 같이 출력을 얻습니다.

ContactNo before replace operation: 1234567890

ContactNo after replace operation: 199999997890