XML DOM - Navigazione
Fino ad ora abbiamo studiato la struttura DOM, come caricare e analizzare oggetti DOM XML e attraversare gli oggetti DOM. Qui vedremo come possiamo navigare tra i nodi in un oggetto DOM. Il DOM XML è costituito da varie proprietà dei nodi che ci aiutano a navigare attraverso i nodi, come ad esempio:
- parentNode
- childNodes
- firstChild
- lastChild
- nextSibling
- previousSibling
Di seguito è riportato un diagramma di un albero dei nodi che mostra la sua relazione con gli altri nodi.
 
                DOM - Nodo padre
Questa proprietà specifica il nodo padre come oggetto nodo.
Esempio
Il seguente esempio (navigate_example.htm) analizza un documento XML ( node.xml ) in un oggetto DOM XML. Quindi l'oggetto DOM viene spostato al nodo padre tramite il nodo figlio -
<!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>Come puoi vedere nell'esempio precedente, il nodo figlio Employee passa al suo nodo padre.
Esecuzione
Salva questo file come navigate_example.html sul percorso del server (questo file e node.xml dovrebbero trovarsi sullo stesso percorso nel tuo server). Nell'output, otteniamo il nodo padre di Employee , ovvero Company .
Primogenito
Questa proprietà è di tipo Node e rappresenta il primo nome figlio presente in NodeList.
Esempio
Il seguente esempio (first_node_example.htm) analizza un documento XML ( node.xml ) in un oggetto DOM XML, quindi passa al primo nodo figlio presente nell'oggetto 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 funzione get_firstChild (p) viene utilizzata per evitare i nodi vuoti. Aiuta a ottenere l'elemento firstChild dall'elenco dei nodi. 
- x = get_firstChild(xmlDoc.getElementsByTagName("Employee")[0])recupera il primo nodo figlio per il nome del tag Employee . 
Esecuzione
Salva questo file come first_node_example.htm sul percorso del server (questo file e node.xml dovrebbero trovarsi sullo stesso percorso nel tuo server). Nell'output, otteniamo il primo nodo figlio di Employee, ovvero FirstName .
Ultimo bambino
Questa proprietà è di tipo Node e rappresenta l'ultimo nome figlio presente nella NodeList.
Esempio
Il seguente esempio (last_node_example.htm) analizza un documento XML ( node.xml ) in un oggetto DOM XML, quindi passa all'ultimo nodo figlio presente nell'oggetto 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>Esecuzione
Salva questo file come last_node_example.htm sul percorso del server (questo file e node.xml dovrebbero trovarsi sullo stesso percorso nel tuo server). Nell'output, otteniamo l'ultimo nodo figlio di Employee, ovvero Email .
Prossimo fratello
Questa proprietà è di tipo Node e rappresenta il figlio successivo, ovvero il fratello successivo dell'elemento figlio specificato presente in NodeList.
Esempio
Il seguente esempio (nextSibling_example.htm) analizza un documento XML ( node.xml ) in un oggetto DOM XML che passa immediatamente al nodo successivo presente nel 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>Esecuzione
Salvare questo file come nextSibling_example.htm sul percorso del server (questo file e node.xml dovrebbero trovarsi sullo stesso percorso nel server). Nell'output, otteniamo il successivo nodo di pari livello di FirstName, ovvero LastName .
Precedente Sibling
Questa proprietà è di tipo Node e rappresenta il figlio precedente, ovvero il fratello precedente dell'elemento figlio specificato presente in NodeList.
Esempio
L'esempio seguente (previoussibling_example.htm) analizza un documento XML ( node.xml ) in un oggetto DOM XML, quindi esplora il nodo precedente dell'ultimo nodo figlio presente nel 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>Esecuzione
Salva questo file come previoussibling_example.htm nel percorso del server (questo file e node.xml dovrebbero trovarsi sullo stesso percorso nel tuo server). Nell'output, otteniamo il precedente nodo di pari livello di Email, ovvero ContactNo .