Heim > Backend-Entwicklung > PHP-Tutorial > Wie greife ich mit SimpleXML korrekt auf XML-Namespaces zu?

Wie greife ich mit SimpleXML korrekt auf XML-Namespaces zu?

DDD
Freigeben: 2024-12-28 21:56:19
Original
617 Leute haben es durchsucht

How Do I Access XML Namespaces Correctly Using SimpleXML?

Zugriff auf XML-Namespaces in SimpleXML

XML-Namespaces sind eine Methode zum Zusammenführen mehrerer XML-Formate in einem einzigen Dokument unter Beibehaltung ihrer jeweiligen Herkunft. Ein XML-Namespace wird durch ein durch Doppelpunkte getrenntes Paar definiert, das aus einem Präfix, das den lokalen Namespace angibt, und einem Uniform Resource Identifier (URI) besteht, der den Namespace identifiziert.

Warum funktioniert der Code in der Frage nicht?

Der erste Versuch, auf ein Namespace-Element im Beispiel zuzugreifen, d. h. ->ns2:item, schlägt fehl, weil SimpleXML erwartet, dass Namespaces mithilfe der Methoden children() und attributes() definiert werden.

Zugriff auf Namespaces in SimpleXML

SimpleXML bietet zwei Ansätze für den Umgang mit Namespaces:

  • children() Methode: Wählt Elemente in einem bestimmten Namespace aus. Dadurch wird der Fokus des Objekts effektiv auf diesen Namespace verschoben, bis über einen weiteren Aufruf von children() zurückgeschaltet wird.
  • attributes()-Methode: Ähnlich wie children(), wird jedoch für den Zugriff auf Attribute innerhalb eines angegebenen Bereichs verwendet Namespace.

Code mit Namespace-Behandlung

Hier ist eine korrigierte Version des Codes:

define('XMLNS_EG1', 'http://example.com');
define('XMLNS_EG2', 'https://namespaces.example.org/two');
define('XMLNS_SEQ', 'urn:example:sequences');

foreach ($sx->children(XMLNS_EG1)->list->children(XMLNS_EG2)->item as $item) {
    echo 'Position: ' . $item->attributes(XMLNS_SEQ)->position . "\n";
    echo 'Item: ' . (string)$item . "\n";
}
Nach dem Login kopieren

Alternativ können Sie den anfänglichen Namespace beim Laden des Dokuments mithilfe des Parameters $namespace_or_prefix von Funktionen wie simplexml_load_string angeben.

Hinweis: Es wird empfohlen, anstelle von Präfixen den vollständigen Namespace-URI zu verwenden, da sich Präfixe ändern können, was möglicherweise zu Problemen führen kann Code.

Das obige ist der detaillierte Inhalt vonWie greife ich mit SimpleXML korrekt auf XML-Namespaces zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage