php simplexml - строка как объект - PullRequest
0 голосов
/ 04 ноября 2010

Надеюсь, что кто-нибудь может посоветовать мне проблему с simplexml.

Мне нужно указать пути для различных узлов, но я не уверен, возможно ли это.

$xml = new SimpleXMLElement($xmlstr);
$image1 = 'images->image[0]->image';

foreach ($xml->record as $record) {
  echo $record->$image1; // i need this be be recognised as $record->images->image[0]->image
}

Надеюсь, что это имеет смысл!Спасибо

1 Ответ

3 голосов
/ 04 ноября 2010

Для этого вы можете использовать массив:

$xml = new SimpleXMLElement($xmlstr);
$levels = array('images', array('key' => 'image', 'index' => 0), 'image');

foreach ($xml->record as $record) {
   $obj = $record;
   foreach($levels as $level) {
      if(is_array($level)) 
         $obj = $obj->{$level['key']}[$level['index']];
      else 
         $obj = $obj->$level; 
   }
   echo $obj;
}

Это создает иерархию путем переназначения $obj равного себе -> того, что будет следующим в массиве.не может интерполировать индексы массива в строках, поэтому, если вам нужно их использовать, просто используйте ассоциированный массив, как показано выше.: -)

...