XML DOM Nodes Lokaliseren

Nodes can be located by using the relationship between nodes.

Example

The following example uses an XML file books.xml.

Function loadXMLDoc(), located in external JavaScript, used to load XML files.

Obtain the parent node of the node
In dit voorbeeld wordt de parentNode-eigenschap gebruikt om de ouderknoop van een knoop te verkrijgen.
Verkrijg de eerste subknoop van een knoop
In dit voorbeeld wordt de firstChild() methode en een aangepaste functie gebruikt om de eerste subknoop van een knoop te verkrijgen.

Locatie van DOM-knooppunten

Knooppunten in het knooppuntstelsel bereiken via de relaties tussen knopen, vaak genoemd knooppuntlocatie ("navigating nodes").

In de XML DOM worden de relaties tussen knopen gedefinieerd door de eigenschappen van de knopen:

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

De volgende afbeelding toont books.xml Een deel van het knooppuntstelsel en het verklaren van de relaties tussen knopen:

DOM node tree

DOM - ouderknoop

Alle knopen hebben slechts één ouderknoop. De volgende code lokaliseert de ouderknoop van <book>:

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

Example explanation:

  • By using loadXMLDoc() Put "books.xml" laden in xmlDoc
  • Verkrijg het eerste <book> element
  • Geef de naam van de ouderknoop van "x" weer

TIY

Voorkom lege tekstknooppunten

Firefox en andere browsers beschouwen lege witruimte of newline als tekstknooppunten, terwijl IE dit niet doet.

Dit veroorzaakt een probleem bij het gebruik van de volgende eigenschappen: firstChild, lastChild, nextSibling, previousSibling.

Om te voorkomen dat we een lege tekstknoop (spaties en newline-symbool tussen elementknooppunten) lokaliseren, gebruiken we een functie om het type van de knoop te controleren:

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

Met de bovenstaande functie kunnen we get_nextSibling(node) gebruiken in plaats van de node.nextSibling-eigenschap.

Code uitleg:

Het type van de elementknoop is 1. Als de同级knoop geen elementknoop is, verplaats dan naar de volgende knoop totdat een elementknoop wordt gevonden. Op deze manier kan hetzelfde resultaat worden verkregen in IE en Firefox.

Verkrijg de eerste element

De volgende code toont de eerste elementknoop van het eerste <book>:

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//controleer of de eerste knoop een elementknoop is
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

Example explanation:

  • By using loadXMLDoc() Put "books.xml"Load xmlDoc"
  • Use the get_firstChild function on the first <book> to get the first child node within the element node
  • Output the node name of the first child node (element node)

TIY

Example

The following example uses similar functions:

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