XML DOM - Navegación

Hasta ahora hemos estudiado la estructura DOM, cómo cargar y analizar el objeto DOM XML y atravesar los objetos DOM. Aquí veremos cómo podemos navegar entre nodos en un objeto DOM. El DOM XML consta de varias propiedades de los nodos que nos ayudan a navegar a través de los nodos, como:

  • parentNode
  • childNodes
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

A continuación se muestra un diagrama de un árbol de nodos que muestra su relación con los otros nodos.

DOM - Nodo principal

Esta propiedad especifica el nodo padre como un objeto de nodo.

Ejemplo

El siguiente ejemplo (navigate_example.htm) analiza un documento XML ( node.xml ) en un objeto DOM XML. Luego, el objeto DOM se navega al nodo principal a través del nodo secundario -

<!DOCTYPE html>
<html>
   <body>
      <script>
         if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
         } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","/dom/node.xml",false);
         xmlhttp.send();
         xmlDoc = xmlhttp.responseXML;

         var y = xmlDoc.getElementsByTagName("Employee")[0];
         document.write(y.parentNode.nodeName);
      </script>
   </body>
</html>

Como puede ver en el ejemplo anterior, el nodo hijo Empleado navega a su nodo padre.

Ejecución

Guarde este archivo como navigate_example.html en la ruta del servidor (este archivo y node.xml deben estar en la misma ruta en su servidor). En la salida, obtenemos el nodo padre de Empleado , es decir, Compañía .

Primer hijo

Esta propiedad es de tipo Node y representa el primer nombre secundario presente en NodeList.

Ejemplo

El siguiente ejemplo (first_node_example.htm) analiza un documento XML ( node.xml ) en un objeto DOM XML, luego navega al primer nodo secundario presente en el objeto DOM.

<!DOCTYPE html>
<html>
   <body>
      <script>
         if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
         } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","/dom/node.xml",false);
         xmlhttp.send();
         xmlDoc = xmlhttp.responseXML;

         function get_firstChild(p) {
            a = p.firstChild;

            while (a.nodeType != 1) {
               a = a.nextSibling;
            }
            return a;
         }
         var firstchild = get_firstChild(xmlDoc.getElementsByTagName("Employee")[0]);
         document.write(firstchild.nodeName);
      </script>
   </body>
</html>
  • La función get_firstChild (p) se usa para evitar los nodos vacíos. Ayuda a obtener el elemento firstChild de la lista de nodos.

  • x = get_firstChild(xmlDoc.getElementsByTagName("Employee")[0])obtiene el primer nodo hijo para el nombre de etiqueta Empleado .

Ejecución

Guarde este archivo como first_node_example.htm en la ruta del servidor (este archivo y node.xml deben estar en la misma ruta en su servidor). En la salida, obtenemos el primer nodo hijo de Empleado, es decir, Nombre .

Último niño

Esta propiedad es de tipo Node y representa el último nombre secundario presente en NodeList.

Ejemplo

El siguiente ejemplo (last_node_example.htm) analiza un documento XML ( node.xml ) en un objeto DOM XML, luego navega hasta el último nodo hijo presente en el objeto DOM xml.

<!DOCTYPE html>
  <body>
      <script>
         if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
         } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","/dom/node.xml",false);
         xmlhttp.send();
         xmlDoc = xmlhttp.responseXML;

         function get_lastChild(p) {
            a = p.lastChild;

            while (a.nodeType != 1){
               a = a.previousSibling;
            }
            return a;
         }
         var lastchild = get_lastChild(xmlDoc.getElementsByTagName("Employee")[0]);
         document.write(lastchild.nodeName);
      </script>
   </body>
</html>

Ejecución

Guarde este archivo como last_node_example.htm en la ruta del servidor (este archivo y node.xml deben estar en la misma ruta en su servidor). En la salida, obtenemos el último nodo secundario de Empleado, es decir, Correo electrónico .

Proximo hermano

Esta propiedad es de tipo Node y representa el siguiente hijo, es decir, el siguiente hermano del elemento hijo especificado presente en NodeList.

Ejemplo

El siguiente ejemplo (nextSibling_example.htm) analiza un documento XML ( node.xml ) en un objeto DOM XML que navega inmediatamente al siguiente nodo presente en el documento xml.

<!DOCTYPE html>
   <body>
      <script>
         if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
         }
         else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","/dom/node.xml",false);
         xmlhttp.send();
         xmlDoc = xmlhttp.responseXML;

         function get_nextSibling(p) {
            a = p.nextSibling;

            while (a.nodeType != 1) {
               a = a.nextSibling;
            }
            return a;
         }
         var nextsibling = get_nextSibling(xmlDoc.getElementsByTagName("FirstName")[0]);
         document.write(nextsibling.nodeName);
      </script>
   </body>
</html>

Ejecución

Guarde este archivo como nextSibling_example.htm en la ruta del servidor (este archivo y node.xml deben estar en la misma ruta en su servidor). En la salida, obtenemos el siguiente nodo hermano de FirstName, es decir, LastName .

Hermano anterior

Esta propiedad es de tipo Node y representa el hijo anterior, es decir, el hermano anterior del elemento hijo especificado presente en NodeList.

Ejemplo

El siguiente ejemplo (previoussibling_example.htm) analiza un documento XML ( node.xml ) en un objeto DOM XML, luego navega por el nodo anterior del último nodo secundario presente en el documento xml.

<!DOCTYPE html>
   <body>
      <script>
         if (window.XMLHttpRequest)
         {
            xmlhttp = new XMLHttpRequest();
         } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","/dom/node.xml",false);
         xmlhttp.send();
         xmlDoc = xmlhttp.responseXML;

         function get_previousSibling(p) {
            a = p.previousSibling;

            while (a.nodeType != 1) {
               a = a.previousSibling;
            }
            return a;
         }

         prevsibling = get_previousSibling(xmlDoc.getElementsByTagName("Email")[0]);
         document.write(prevsibling.nodeName);
      </script>
   </body>
</html>

Ejecución

Guarde este archivo como previoussibling_example.htm en la ruta del servidor (este archivo y node.xml deben estar en la misma ruta en su servidor). En la salida, obtenemos el nodo hermano anterior de Correo electrónico, es decir, ContactNo .