XML DOM Knotenposition

Knoten können durch die Beziehungen zwischen Knoten lokalisiert werden.

Knotenlokalisierung im DOM

Durch die Beziehungen zwischen Knoten können Knoten im Knotenbaum erreicht werden, was normalerweise als "Knotenlokalisierung" (oder Knotennavigation, navigating nodes) bezeichnet wird.

In XML DOM werden Knotenbeziehungen durch die Attribute der Knoten definiert:

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

Das folgende Diagramm zeigt books.xml zeigt einen Teil des Knotenbaums und erläutert die Beziehungen zwischen Knoten:

DOM Knotenbaum

DOM - übergeordneter Knoten

Alle Knoten haben nur einen übergeordneten Knoten. Das folgende Code navigiert zum übergeordneten Knoten von <book>:

Beispiel

function myFunction(xml) {
var xmlDoc = xml.responseXML;
    var x = xmlDoc.getElementsByTagName("book")[0];
    document.getElementById("demo").innerHTML = x.parentNode.nodeName;
}

Versuchen Sie es selbst

Beispiel erläutern:

  1. Verwenden Sie books.xml geladen wird xmlDoc in
  2. Erhalten Sie den ersten <book>-Element
  3. Geben Sie den Knotennamen des übergeordneten Knotens von "x" aus

Vermeiden Sie leere Textknoten

Einige Browser könnten Leerzeichen oder Zeilenumbrüche als Textknoten betrachten. Dies kann Probleme verursachen, wenn die folgenden Eigenschaften verwendet werden:

  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

Um zu vermeiden, dass auf leere Textknoten (Leerraum und Zeilenumbrüche zwischen Elementknoten) navigiert wird, verwenden wir eine Funktion, um den Knotentyp zu überprüfen:

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

Mit der obigen Funktion können wir get_nextSibling(node) anstelle der Eigenschaft node.nextSibling verwenden.

Codeerklärung:

Der Typ des Elementknotens ist 1. Wenn der Knoten auf gleicher Ebene kein Elementknoten ist, bewegen Sie sich zum nächsten Knoten, bis ein Elementknoten gefunden wird.

Erhalten Sie den ersten Kindknoten

Das folgende Code zeigt den ersten Elementknoten des ersten <book>-Elements:

Beispiel

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myFunction(this);
    }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();
function myFunction(xml) {
    var xmlDoc = xml.responseXML;
    var x = get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
    document.getElementById("demo").innerHTML = x.nodeName;
}
// Überprüfen Sie, ob der erste Knoten ein Elementknoten ist
function get_firstChild(n) {
    var y = n.firstChild;
    while (y.nodeType != 1) {
        y = y.nextSibling;
    }
    return y;
}
</script>
</body>
</html>

Versuchen Sie es selbst

Beispiel erläutern:

  1. Verwenden Sie books.xml Laden Sie es in xmlDoc
  2. Verwenden Sie die Funktion get_firstChild auf dem ersten <book>-Knoten, um den ersten Kindknoten zu erhalten
  3. Geben Sie den Knotennamen des ersten Kindknotens aus

Mehr Beispiele

lastChild()
Verwenden Sie die Methode lastChild() und benutzerdefinierte Funktionen, um den letzten Kindknoten eines Knotens zu erhalten.
nextSibling()
Use the nextSibling() method and custom functions to get the next sibling node of an element.
previousSibling()
Use the previousSibling() method and custom functions to get the previous sibling node of an element.