phpbar.de logo

Mailinglisten-Archive

[php] SimpleXMLElement in Array konvertieren

[php] SimpleXMLElement in Array konvertieren

Ralf Eggert r.eggert at travello.de
Mon Jan 22 17:23:58 CET 2007


Hallo,

irgendwie habe ich ein Brett vor dem Kopf. Und zwar möchte ich einen XML
String in ein Array konvertieren. simplexml_load_string() bietet ja die
Möglichkeit, XML Strings zu laden und daraus ein SimpleXMLElement zu
erstellen. Nun möchte ich daraus ein Array konvertieren.

Hier mal meine Klasse ohne Kommentare und Eingabevalidierungen:

class Travello_Xml
{
    protected $_xmlObj;

    public function __construct($xmlString = false)
    {
        $this->_xmlObj = @simplexml_load_string($xmlString);
    }

    public function convertToArray()
    {
        $xmlArray = $this->asArray($this->_xmlObj);

        return $xmlArray;
    }

    protected function asArray(SimpleXMLElement $xmlObj)
    {
        $xmlArray = array();

        foreach ($xmlObj as $key => $value)
        {
            if (is_object($value))
            {
                $xmlArray[$key] = $this->asArray($value);
            }
            else
            {
                $xmlArray[$key] = $value;
            }
        }

        return $xmlArray;
    }
}

Wenn ich nun die Klasse mit dem folgenden String füttere

  <config><option><foo>bar</foo><bar>foo</bar></option></config>

und die convertToArray() Methode aufrufe, erhalte ich aber nicht das
gewünschte Ergebnis:

Array
(
  [option] => Array
    (
       [foo] => bar
       [bar] => foo
     )
)

Stattdessen erhalte ich:

Array
(
  [option] => Array
    (
       [foo] => Array
         (
         )
       [bar] => Array
         (
         )
     )
)

Ich glaube, ich habe entweder ein riesiges Brett vorm Kopf oder ich
mache einen grundlegenden Denkfehler. Kann mir jemand bitte einen Tipp
geben?

Danke und Gruß,

Ralf

php::bar PHP Wiki   -   Listenarchive