dedlfix: simplexml vs. SOAP xml

Beitrag lesen

echo $begrüßung;

Da du nicht beschreibst, was du erwartest und was stattdessen bei dir passiert, kann ich dir nicht sagen, was du falsch machst.
Ich suche eine Art Array, der die Daten der xml Datei representiert.
Ähnlich wie $data[site][id]=77; $data[site][english_name]=test; ...
Irgendwo sollten auch die areays darin zu finden sein usw.
Stattdessen sehe ich nur leere Objekte.

Ja, das ist das Problem bei der Magie in SimpleXML, besonders wenn dann noch Namespaces mitspielen.

Bei mir steht in $manifest der SimpleXMLElement für SOAP:Body. Dessen Kind, das du in dem angegebenen Codestück aber nicht abfragst, ist <site>, und dessen Kinder ...
Wie komme ich an dieses ran?

An das Kind von SOAP:Body kommst du genauso wie an das Kind von SOAP:Envelope, mit ->children(). Diesmal allerdings ohne Namespace-Angabe. Warum das so ist, weiß ich auch nicht, so tief stecke ich der SimpleXML-Problematik nicht drin.
Ab jetzt kannst du weiter wie auf einfache Eigenschaften zugreifen. Beispielsweise liefert ->site->id den Wert 77.

Vielleicht irritiert dich auch SimpleXML etwas. Das ist normal, denn diese Erweiterung arbeitet viel mit PHPs OOP-Magie namens Overloading. Da werden manche Eigenschaften eines Objekts erst bei einem Zugriff darauf berechnet, werden also beim print_r() und ähnlichem nicht gleich angezeigt.
Gab es da nicht eine Option, womit man diese alle auf einen Schlag (zum Debuggen und Testen) aufrufen lassen kann? So wie es jetzt ist, finde ich diese Daten jedenfalls nicht.

Nein, weil dann SimpleXML nicht weiß, welchen Namespace du gern verwenden willst. Es müsste bei der Anzeige einerseits irgendwie die Namespaces mit anzeigen, das aber andererseits mit den vorgegebenen Möglichkeiten und der üblichen Struktur von print_r(), und obendrin sollten die Daten auch noch realistisch sein. Es nützt nichts,

SimpleXMLElement Object(
  [SOAP:Body] => SimpleXMLElement Object

anzuzeigen, wenn man über ->SOAP:Body nicht an das Objekt rankommt.

Es scheint aber so, dass, wenn du den Namespace überwunden hast, der Rest auch in einem Rutsch angezeigt wird.

echo "$verabschiedung $name";