NamedNodeMap

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Das Interface NamedNodeMap ist eine Liste, deren Elemente einen Namen haben und über diesen Namen gefunden werden können. Obwohl das Interface die gleichen Methoden und Attribute besitzt wie die NodeList, hängen diese beiden nicht zusammen: Zwar kann man die Knoten in einer NamedNodeMap ebenfalls mit Hilfe des Attributs length und der Methode item() durchlaufen, die dabei erhaltene Reihenfolge ist aber undefiniert.

Java-Beispiel

// Lies die Attribute des Elements.
NamedNodeMap nnm = elem.getAttribute(  );

 


Attribute

Die NamedNodeMap kennt ein einziges Attribut:

 


length: unsigned long

Die Gesamtzahl der Node-Objekte in der Liste.

Java-Bindung
public long getLength( );

Java-Beispiel

// Iteriere über die gesamte Attributliste.
for (int i = 0; i < nnm.getLength(  ); i++) {
    ...
}

 


Methoden

Ein NamedNodeMap-Objekt kennt die folgenden Methoden:

 


getNamedItem: name

Liefert dasjenige Objekt aus der Liste, dessen Attribut nodeName mit dem angegebenen Argument name übereinstimmt.

Argument

  • name: DOMString

    Name des zu lesenden Knotens.

Java-Bindung
public Node getNamedItem(String name);

Java-Beispiel

 

// Prüfe, ob ein id-Attribut in der Liste vorhanden ist.
// Erzeuge ein neues, falls notwendig.
// nnm wurde durch Auslesen der Attribute
// aus einem Element erzeugt.
if (nnm.getNamedItem("id") == null) {
    // Finde das Dokument.
    Document doc = elem.getOwnerDocument(  );
    // Erzeuge einen neuen Attributknoten.
    Attr attrID = doc.createAttribute("id");

    // Setze den Attributwert ...
    attrID.appendChild(doc.createTextNode(makeUniqueID(elem)));
    // ... und füge den Knoten in die NamedNodeMap ein.
    nnm.setNamedItem(attrID);
}

 


getNamedItemNS: namespaceURI, localNam (2)

Erweitert die Methode getNamedItem um die Unterstützung von Namensräumen. Ein passendes Listenelement wird nicht nur über den lokalen Teil des Knotennamens gesucht. Vielmehr kann auch ein Namensraum-URI in die Suche einbezogen werden.

Argumente

  • namespaceURI: DOMString

    Der URI des Namensraums, in dem der gesuchte Knoten liegen soll.

  • localName: DOMString

    Lokaler Name des gesuchten Knotens.

Java-Bindung
public Node getNamedItemNS(String namespaceURI, String localName);

 


item: index

Liefert das Node-Objekt mit Position index. Falls der angegebene Index < 0 oder >= dem Attribut length der NodeList ist, ist das Ergebnis null.

Argument

  • index: unsigned long

    Der Index des gesuchten Knotens, mit 0 beginnend.

Java-Bindung
public Node item(long index);

Java-Beispiel

// Entferne das letzte Attribut aus der Liste.
if (nnm.getLength(  ) &gt; 0) {
    nnm.removeNamedItem(nnm.item(nnm.getLength()-1).getNodeName(  ));
}

 

 


removeNamedItem: name

Entfernt das Node-Objekt mit dem Property nodeName, das dem Parameter name entspricht, und liefert eine Referenz auf das entfernte Objekt. Falls der zu entfernende Knoten ein Attr-Objekt ist und die DTD einen Default-Wert für dieses Attribut definiert, wird der Knoten sofort durch ein neues Attr-Objekt mit dem Default-Wert ersetzt.

Argument

  • name: DOMString

    Gibt den nodeName des zu entfernenden Knotens an.

Exception

  • NOT_FOUND_ERR

    Diese Exception wird ausgelöst, wenn die Liste keinen entsprechenden Knoten enthält.

Java-Bindung
public Node removeNamedItem(String name) throws DOMException;

Java-Beispiel

// Entferne das id-Attribut.
NamedNodeMap nnm = elem.getAttribute(  );

if (nnm.removeNamedItem("id") == null) {
    System.err.println("Kein id-Attribut vorhanden.");
}

 


removeNamedItemNS: namespaceURI, localName (2)

Entfernt das Node-Objekt mit den übereinstimmenden Properties namespaceURI und localName und liefert eine Referenz auf das entfernte Objekt. Falls der zu entfernende Knoten ein Attr-Objekt ist und die DTD einen Default-Wert für dieses Attribut definiert, wird der Knoten sofort durch ein neues Attr-Objekt mit dem Default-Wert ersetzt.

Argumente

  • namespaceURI: DOMString

    Der URI des Namensraums, in dem der zu löschende Knoten liegen soll.

  • localName: DOMString

    Lokaler Name des zu löschenden Knotens.

Exception

  • NOT_FOUND_ERR

    Diese Exception wird ausgelöst, wenn die Liste keine übereinstimmenden Parameter namespaceURI und localName enthält.

Java-Bindung
public Node removeNamedItemNS(String namespaceURI, String localName);

 


setNamedItem: arg

Fügt das angegebene Node-Objekt in die Liste ein und verwendet dabei das Attribut nodeName. Da dieser Wert bei vielen Knotentypen hartkodiert ist, kann man nur maximal einen dieser Typen in der NamedNodeMap speichern. Diese Problematik wird in der Beschreibung des »nodeName: DOMString.«« näher erläutert.

Das Ergebnis dieser Methode ist das ersetzte Node-Objekt bzw. der Wert null, falls kein Knoten mit dem angegebenen nodeName vorhanden ist.

Argument

  • arg: Node

    Das in der Liste zu speichernde Node-Objekt. Das Attibut nodeName wird als Suchkriterium benutzt. Ein eventuell bereits vorhandener Knoten mit demselben nodeName wie der neue Knoten wird durch den von arg referenzierten Knoten ersetzt.

Exceptions

  • WRONG_DOCUMENT_ERR

    Wird ausgelöst, wenn der arg-Knoten von einem Dokument erzeugt wurde, das nicht auch den NamedNodeMap generiert hat.

  • NO_MODIFICATION_ALLOWED_ERR

    Wird ausgelöst, wenn die NamedNodeMap nur-lesbar ist.

  • INUSE_ATTRIBUTE_ERR

    Wird ausgelöst, wenn der arg-Knoten ein Attr-Knoten und bereits in Gebrauch durch die attributes-Liste eines anderen Elements ist.

Java-Bindung
public Node setNamedItem(Node arg) throws DOMException;

Java-Beispiel

// Prüfe, ob das id-Attribut bereits vorhanden ist.
// Falls nicht, füge ein neues Attribut ein.
if (nnm.getNamedItem("id") == null) {
    // Finde das Dokument.
    Document doc = elem.getOwnerDocument(  );
    // Erzeuge einen neuen Attributknoten.
    Attr attrID = doc.createAttribute("id");

    // Setze den Attributwert ...
    attrID.appendChild(doc.createTextNode(makeUniqueID(elem)));

    // ... und baue ihn in die NamedNodeMap ein.
    nnm.setNamedItem(attrID);
}

 


setNamedItemNS: arg (2)

Entspricht der Methode setNamedItem, berücksichtigt aber Namensräume im Node-Objekt. Das Ergebnis der Methode ist eine Referenz auf das eventuell ersetzte Node-Objekt.

Argument

  • arg: Node

    Das in der Liste zu speichernde Objekt vom Typ Node. Die Attribute namespaceURI und localName dieses Knotens werden mit den entsprechenden Attributen der vorhandenen Knoten verglichen. Ist ein Knoten mit denselben Attributwerten vorhanden, wird dieser ersetzt.

Exceptions

  • WRONG_DOCUMENT_ERR

    Wird ausgelöst, wenn der arg-Knoten von einem Dokument erzeugt wurde, das nicht auch den NamedNodeMap generiert hat.

  • NO_MODIFICATION_ALLOWED_ERR

    Wird ausgelöst, wenn die NamedNodeMap nur-lesbar ist.

  • INUSE_ATTRIBUTE_ERR

    Wird ausgelöst, wenn der arg-Knoten ein Attr-Knoten und bereits in Gebrauch durch die attributes-Liste eines anderen Elements ist.

Java-Bindung
public Node setNamedItemNS(Node arg) throws DOMException;

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de