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:
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"; }
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!