Цикл через объект SimpleXML или превращение всего этого в массив
Я пытаюсь выяснить, как выполнить итерацию, хотя возвращаемый объект SimpleXML.
Я использую инструментарий под названием Тарзан AWS, который подключается к веб-службам Amazon (SimpleDB, S3, EC2 и т. д.). Я специально использую SimpleDB.
Я могу поместить данные в сервис Amazon SimpleDB и я могу получить его обратно. Я просто не знаю, как обрабатывать возвращаемый объект SimpleXML.
в документации Tarzan AWS говорится следующее:
посмотрите на ответ для навигации по заголовкам и телу ответа. Обратите внимание, что это объект, а не массив, и что тело является объектом SimpleXML.
вот пример возвращаемого объекта SimpleXML:
[body] => SimpleXMLElement Object ( [QueryWithAttributesResult] => SimpleXMLElement Object ( [Item] => Array ( [0] => SimpleXMLElement Object ( [Name] => message12413344443260 [Attribute] => Array ( [0] => SimpleXMLElement Object ( [Name] => active [Value] => 1 ) [1] => SimpleXMLElement Object ( [Name] => user [Value] => john ) [2] => SimpleXMLElement Object ( [Name] => message [Value] => This is a message. ) [3] => SimpleXMLElement Object ( [Name] => time [Value] => 1241334444 ) [4] => SimpleXMLElement Object ( [Name] => id [Value] => 12413344443260 ) [5] => SimpleXMLElement Object ( [Name] => ip [Value] => 10.10.10.1 ) ) ) [1] => SimpleXMLElement Object ( [Name] => message12413346907303 [Attribute] => Array ( [0] => SimpleXMLElement Object ( [Name] => active [Value] => 1 ) [1] => SimpleXMLElement Object ( [Name] => user [Value] => fred ) [2] => SimpleXMLElement Object ( [Name] => message [Value] => This is another message ) [3] => SimpleXMLElement Object ( [Name] => time [Value] => 1241334690 ) [4] => SimpleXMLElement Object ( [Name] => id [Value] => 12413346907303 ) [5] => SimpleXMLElement Object ( [Name] => ip [Value] => 10.10.10.2 ) ) ) )
Итак, какой код мне нужно получить через каждый из элементов объекта? Я хотел бы перебрать каждый из них и обработать его как возвращенный запрос mySQL. Например, я могу запросить SimpleDB, а затем выполнить цикл SimpleXML, чтобы я мог отображение результатов на странице.
альтернативно, как вы превращаете весь shebang в массив?
Я новичок в SimpleXML, поэтому прошу прощения, если мои вопросы недостаточно конкретны.
5 ответов
одно небольшое дополнение для исправления PHP 5.2.
$response_array = json_decode(json_encode($response),true);
в случае ответов XML, которые не содержат разделов CDATA (например, Amazon/Tarzan), вы можете использовать следующее, Если у вас есть PHP 5.2 или новее.
// Get a SimpleXML response back from Tarzan
$s3 = new AmazonS3();
$response = $s3->list_buckets();
// Convert SimpleXML to Array in PHP 5.2.
$response_array = json_decode(json_encode($response));
это будет стандартная утилита, доступная для всех объектов в следующей основной версии Tarzan (CloudFusion 2.5).
это работает:
// $result is a Simple XML object
$result = convertSimpleXMLToArray($result);
function convertSimpleXMLToArray($xml)
{
if(class_basename($xml) == 'SimpleXMLElement')
{
$xml = get_object_vars($xml);
foreach($xml as $key => $value)
{
if(class_basename($value) == 'SimpleXMLElement') $xml[$key] = convertSimpleXMLToArray($value);
}
}
return $xml;
}