XML DOM定位nod

Kan lokaliseras genom att använda relationer mellan noder.

Exempel

Nedanstående exempel använder XML-filer books.xml.

Funktion loadXMLDoc()Ligger i extern JavaScript, används för att ladda XML-filer.

Få tag på en nodas föräldernode
Detta exempel använder parentNode-attributet för att hämta föräldern till en nod.
Hämta den första undernoden till en nod
Detta exempel använder firstChild() metod och en anpassad funktion för att hämta den första undernoden till en nod.

Navigera DOM-noder

Genom att använda relationer mellan noder kan man komma åt noder i nodträdet, vilket ofta kallas nodnavigering ("navigating nodes").

I XML DOM definieras nodrelationer som egenskaper för noder:

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

Följande bild visar books.xml En del av nodträdet och förklarar nodernas relationer:

DOM nodträdet

DOM - föräldernod

Alla noder har endast en föräldernod. Följande kod lokaliserar föräldern till <book>:

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

Försök att förklara:

  • Genom att använda loadXMLDoc() Lägg till "books.xml" laddas in i xmlDoc
  • Hämta den första <book>-elementet
  • Utskriv namnet på föräldern till noden "x"

TIY

Undvik tomma textnoder

Firefox och några andra webbläsare betraktar tomma blanka eller radbrytningssymboler som textnoder, medan IE inte gör det.

Detta kan skapa ett problem när följande egenskaper används: firstChild, lastChild, nextSibling, previousSibling.

För att undvika att定位 till en tom textnod (utrymme och radbrytningssymboler mellan elementnoder), använder vi en funktion för att kontrollera nodtypen:

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

Med ovanstående funktion kan vi använda get_nextSibling(node) för att ersätta node.nextSibling-egenskapen.

Kodförklaring:

Elementnodens typ är 1. Om den närmaste noden inte är en elementnod, flyttas till nästa nod tills en elementnod hittas. På detta sätt kan samma resultat fås i både IE och Firefox.

Hämta den första elementet

Följande kod visar den första <book>-elementets första elementnod:

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//kontrollera om den första noden är en elementnod
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>

Output:

title

Försök att förklara:

  • Genom att använda loadXMLDoc() Lägg till "books.xml"Ladda xmlDoc"
  • Använd get_firstChild-funktionen på den första <book>-taggen för att få den första barnnoden i elementnoden
  • Output namnet på den första barnnoden (en elementnod)

TIY

Exempel

Följande exempel använder liknande funktioner:

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