W3docs

getNamespaces()

Erfahren Sie, wie PHP's getNamespaces() Namespaces für ein XML-Element zurückgibt, mit Syntax, Beispiel und Unterschied zu getDocNamespaces().

Einführung

SimpleXML ist eine PHP-Erweiterung, die eine einfache, objektorientierte API zum Lesen von XML-Dokumenten bereitstellt. Wenn ein XML-Dokument Namespaces verwendet — zum Beispiel <bk:title>, wobei bk an eine URI gebunden ist — müssen Sie oft wissen, welche Namespaces ein bestimmtes Element deklariert oder erbt. Die Methode SimpleXMLElement::getNamespaces() beantwortet genau diese Frage: Sie gibt die Namespaces zurück, die für ein Element gültig sind. Dieser Artikel erläutert die Syntax, zeigt ein ausführbares Beispiel und klärt, wie sie sich von der eng verwandten getDocNamespaces() unterscheidet.

Die Funktion SimpleXMLElement::getNamespaces() verstehen

getNamespaces() gibt ein assoziatives array der Namespaces zurück, die in einem Element verwendet werden — das heißt die Präfixe (und der Standard-Namespace, mit einem leeren string als Schlüssel), die tatsächlich auf den Knoten und optional seine Nachfolger zutreffen. Die Syntax folgt dem offiziellen PHP-Handbuchformat:

SimpleXMLElement::getNamespaces ( bool $recursive = false ) : array

Hierbei ist $recursive optional. Wenn er auf dem Standardwert false belassen wird, meldet die Methode nur die Namespaces, die am aktuellen Element verwendet werden. Wenn er auf true gesetzt wird, durchläuft sie auch die untergeordneten Elemente und schließt alle von ihnen verwendeten Namespaces ein. Das zurückgegebene array ordnet jedem Präfix seine Namespace-URI zu.

Es lohnt sich, zwei ähnliche Methoden gegenüberzustellen:

  • getNamespaces() gibt die Namespaces zurück, die vom Element (und optional seinen Kindern) tatsächlich verwendet werden.
  • getDocNamespaces() gibt jeden im Dokument deklarierten Namespace zurück, unabhängig davon, ob er verwendet wird oder nicht.

Beispielverwendung

Sehen wir uns ein Beispiel an, um zu verstehen, wie SimpleXMLElement::getNamespaces() in PHP funktioniert:

php— editable, runs on the server

Im obigen Beispiel erstellen wir ein SimpleXMLElement aus einem <book>-Element, dessen Kind <bk:title> den an https://example.com/books gebundenen bk-Namespace verwendet. Die Übergabe von true an getNamespaces() veranlasst die Methode, die Kinder zu durchsuchen, sodass der von <bk:title> verwendete bk-Namespace einbezogen wird. Anschließend iterieren wir über das zurückgegebene array und geben jeden Präfix zusammen mit seiner URI aus. Die Ausgabe lautet:

Prefix: bk, URI: https://example.com/books

Hätten wir stattdessen getNamespaces(false) aufgerufen, wäre das array hier leer, da das root-Element <book> selbst das Präfix bk nicht verwendet — nur sein Kind tut dies.

Fazit

Die Methode SimpleXMLElement::getNamespaces() ist ein gezieltes Werkzeug, um herauszufinden, welche Namespaces für ein Element tatsächlich gültig sind. Verwenden Sie sie (mit $recursive = true), wenn Sie die Namespaces benötigen, auf die ein Element und seine Kinder angewiesen sind, und greifen Sie auf getDocNamespaces() zurück, wenn Sie jeden im Dokument deklarierten Namespace benötigen. Um zu erfahren, wie Sie Namespace-Knoten abfragen, sobald Sie ihre Präfixe kennen, lesen Sie registerXPathNamespace().

Übungen

Übung
Was gibt SimpleXMLElement::getNamespaces() zurück?
Was gibt SimpleXMLElement::getNamespaces() zurück?
Was this page helpful?