Signatur
Beschreibung
lookupNamespaceURI() löst ein Namespace-Präfix, z. B. "svg" oder "xlink", im Kontext eines bestimmten Knotens auf. Die Methode prüft zuerst den Namespace und das Präfix des Elements selbst und danach dessen xmlns:präfix-Attribute. Wird dort nichts gefunden, sucht sie der Reihe nach bei den Elternelementen weiter. So erhältst du genau die Namespace-Deklaration, die an dieser Stelle im Dokument gilt.
Übergibst du null oder einen leeren String, liefert die Methode den Standard-Namespace (Default Namespace) des Knotens. Das ist die URI, die über ein einfaches xmlns="…" festgelegt ist oder zum Element selbst gehört, wenn es kein Präfix hat. In HTML-Dokumenten ist das bei normalen Elementen http://www.w3.org/1999/xhtml und bei eingebettetem SVG http://www.w3.org/2000/svg.
Wie gesucht wird, hängt vom Knotentyp ab:
- Element: Das Element selbst und dann seine Vorfahren werden durchsucht.
- Document: Die Suche wird an
documentElementweitergegeben. Hat das Dokument kein Wurzelelement, ist das Ergebnisnull. - Attr: Die Suche wird an das
ownerElementweitergegeben. - Text, Kommentar und ähnliche Knoten: Die Suche startet beim Elternelement.
- DocumentType und DocumentFragment: Das Ergebnis ist immer
null.
In der Praxis brauchst du die Methode vor allem bei XML-Dokumenten wie RSS/Atom, SOAP, SVG oder XHTML. Typische Fälle sind getElementsByTagNameNS(), createElementNS() und XPath-Namespace-Resolver mit document.evaluate(), die eine Präfix-zu-URI-Zuordnung brauchen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $prefix Pflicht | string | null | Das Präfix, das aufgelöst werden soll, ohne Doppelpunkt, z. B. "atom". null oder "" fragt den Standard-Namespace ab. Der Parameter ist Pflicht: Rufst du die Methode ohne Argument auf, wird das in "undefined" umgewandelt und als Präfix gesucht. |
Rückgabewert
null, wenn das Präfix hier nicht deklariert ist. Ist ein Präfix ausdrücklich mit einem leeren Wert deklariert (xmlns=""), ist das Ergebnis ebenfalls null.Beispiele
Präfixe in einem Atom-Feed auflösen
const xml = `<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/">
<entry>
<title>Hallo Welt</title>
<media:thumbnail url="bild.jpg"/>
</entry>
</feed>`;
const doc = new DOMParser().parseFromString(xml, 'application/xml');
const entry = doc.querySelector('entry');
console.log(entry.lookupNamespaceURI('media')); // von <feed> geerbt
console.log(entry.lookupNamespaceURI(null)); // Standard-Namespace
console.log(entry.lookupNamespaceURI('dc')); // nicht deklariert
Standard-Namespace in HTML und eingebettetem SVG
document.body.innerHTML = '<div id="box"><svg id="icon"><circle r="5"/></svg></div>';
const div = document.getElementById('box');
const circle = document.querySelector('#icon circle');
console.log(div.lookupNamespaceURI(null));
console.log(circle.lookupNamespaceURI(null));
console.log(document.lookupNamespaceURI(null)); // wird an <html> weitergegeben
Namespace-Resolver für XPath
const xml = `<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><status>ok</status></soap:Body>
</soap:Envelope>`;
const doc = new DOMParser().parseFromString(xml, 'application/xml');
// Präfixe im XPath-Ausdruck über die Deklarationen im Dokument auflösen
const resolver = (prefix) => doc.documentElement.lookupNamespaceURI(prefix);
const result = doc.evaluate(
'/soap:Envelope/soap:Body/status',
doc,
resolver,
XPathResult.STRING_TYPE,
null
);
console.log(result.stringValue);
Vordefinierte Präfixe xml und xmlns
const doc = new DOMParser().parseFromString('<root/>', 'application/xml');
const root = doc.documentElement;
console.log(root.lookupNamespaceURI('xml'));
console.log(root.lookupNamespaceURI('xmlns'));
// Wichtig · Fallstricke
- Präfixe sind in HTML-Dokumenten eingeschränkt: Der HTML-Parser erzeugt keine allgemeinen Namespace-Präfixe. Ein Element wie
<foo:bar>ist in HTML ein normales HTML-Element mit dem lokalen Namenfoo:bar. Für eigene Präfixe musst du das Dokument deshalb als XML parsen, zum Beispiel mitDOMParserund'application/xml', oder mitcreateElementNS()/setAttributeNS()arbeiten. - Nur Deklarationen werden ausgewertet: Die Methode liest die Namespace-Informationen aus dem Baum. Ob ein Präfix im Dokument tatsächlich benutzt wird, spielt keine Rolle. Nachträglich per
setAttribute('xmlns:x', …)gesetzte Attribute können zu überraschenden Ergebnissen führen. Verwende stattdessensetAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:x', uri). nullund""bedeuten dasselbe: Beide fragen den Standard-Namespace ab. Rufst du die Methode dagegen ohne Argument auf, wird der String\"undefined\"gesucht.- Nicht verbundene Knoten: Bei
DocumentFragment,DocumentTypeund einem Dokument ohne Wurzelelement ist das Ergebnis immernull. - Umgekehrte Richtung:
lookupPrefix()ermittelt das Präfix zu einer URI.isDefaultNamespace()prüft, ob eine URI der Standard-Namespace ist. - Kompatibilität: Die Methode wird von allen modernen Browsern unterstützt und ist Teil des DOM Living Standard. In Node.js gibt es sie nur über DOM-Implementierungen wie jsdom.