XML DOM solmun sijainti

solmun sijainti voidaan määrittää solmujen välisistä suhteista.

Esimerkki

Seuraavassa esimerkissä käytetään XML-tiedostoa books.xml.

Funktio loadXMLDoc()sijaitsee ulkoisessa JavaScriptissä, käytetään XML-tiedoston lataamiseen.

Hanki solmun isäsolmu
Tässä esimerkissä käytetään parentNode -ominaisuutta saadakseen solmun isäntäsolmun.
Hae solmun ensimmäinen lapsisolmu
Tässä esimerkissä käytetään firstChild() -menetelmää ja mukautettua funktiota saadakseen solmun ensimmäisen lapsisolmun.

Navigoi DOM-solmuja

Solmujen väliset suhteet avulla voidaan selailla solmuta, mikä tunnetaan yleisesti solmujen navigointina ("navigating nodes").

XML DOM:ssa solmujen väliset suhteet määritellään solmujen ominaisuuksilla:

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

Seuraava kuva näyttää: books.xml Osa solmuista ja selitetään solmujen väliset suhteet:

DOM solmu puu

DOM - isäntäsolmu

Kaikki solmut ovat yhdellä isäntäsolmulla. Seuraava koodi sijoittuu <book>-solmun isäntäsolmuun:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book")[0];
document.write(x.parentNode.nodeName);

Esimerkki selitetään:

  • Käyttämällä loadXMLDoc() "books.xml" tuodaan xmlDoc:iin
  • Hae ensimmäinen <book>-solmu
  • Tulosta "x"-solmun isäntäsolmun solmunimi

TIY

Vältä tyhjiä tekstisolmuja

Firefox ja muutamat muut selaimet näkevät tyhjät välilyönnit ja rivinvaihdot tekstisolmuina, kun taas IE ei tee niin.

Tämä aiheuttaa ongelman seuraavien ominaisuuksien käytössä: firstChild, lastChild, nextSibling, previousSibling.

Välttääksemme sijoittumisen tyhjiin tekstisolmuihin (elementtisolmujen välisissä välilyönneissä ja rivinvaihdoksissa) käytämme funktiota solmun tyyppien tarkistamiseen:

function get_nextSibling(n)
{
y=n.nextSibling;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}

Yllä olevien funktioiden avulla voimme käyttää get_nextSibling(node) -funktiota korvaamaan node.nextSibling -ominaisuutta.

Koodin selitys:

Elementtisolmun tyyppi on 1. Jos samaa tasoa oleva solmu ei ole elementtisolmu, siirry seuraavaan solmuun, kunnes löydetään elementtisolmu. Tällä tavalla saadaan sama tulos sekä IE:ssä että Firefoxissa.

Hae ensimmäinen solmu

Seuraava koodi näyttää ensimmäisen <book>-solmun ensimmäisen elementtisolmun:

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//tarkista, onko ensimmäinen solmu elementtisolmu
function get_firstChild(n)
{
y=n.firstChild;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
x=get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.write(x.nodeName);
</script>
</body>
</html>

Tulostus:

title

Esimerkki selitetään:

  • Käyttämällä loadXMLDoc() "books.xml"Lataa xmlDoc:ssa
  • Käytä get_firstChild-funktiota ensimmäisessä <book>-elementissä, jotta voit saada ensimmäisen lapsisolmun elementtisolmussa
  • Tulostaa ensimmäisen lapsisolmun (elementtisolmun) solmunimi

TIY

Esimerkki

Alla olevassa esimerkissä käytetään samankaltaisia funktioita:

  • firstChild: TIY
  • lastChild: TIY
  • nextSibling: TIY
  • previousSibling: TIY