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 .