Php 循环通过SimpleXML对象,或将整个对象转换为数组

Php 循环通过SimpleXML对象,或将整个对象转换为数组,php,amazon-web-services,simplexml,amazon-simpledb,Php,Amazon Web Services,Simplexml,Amazon Simpledb,我正在尝试解决如何迭代返回的SimpleXML对象 我正在使用一个名为的工具包,它连接到AmazonWeb服务(SimpleDB、S3、EC2等)。我特别使用SimpleDB 我可以把数据放到Amazon SimpleDB服务中,然后我可以把它取回。我只是不知道如何处理返回的SimpleXML对象 Tarzan AWS文件中说: 查看响应以浏览响应的标题和主体。请注意,这是一个对象,而不是数组,主体是一个SimpleXML对象 以下是返回的SimpleXML对象的示例: [body] => Si

我正在尝试解决如何迭代返回的SimpleXML对象

我正在使用一个名为的工具包,它连接到AmazonWeb服务(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 ) ) ) ) [body]=>SimpleXMLElement对象 ( [QueryWithAttributeResult]=>SimpleXMLElement对象 ( [项目]=>阵列 ( [0]=>SimpleXMLElement对象 ( [名称]=>消息1241334443260 [属性]=>数组 ( [0]=>SimpleXMLElement对象 ( [名称]=>活动 [值]=>1 ) [1] =>SimpleXMLElement对象 ( [名称]=>用户 [价值]=>约翰 ) [2] =>SimpleXMLElement对象 ( [名称]=>消息 [值]=>这是一条消息。 ) [3] =>SimpleXMLElement对象 ( [名称]=>时间 [值]=>1241334444 ) [4] =>SimpleXMLElement对象 ( [名称]=>id [值]=>1241334443260 ) [5] =>SimpleXMLElement对象 ( [名称]=>ip [值]=>10.10.10.1 ) ) ) [1] =>SimpleXMLElement对象 ( [名称]=>消息12413346907303 [属性]=>数组 ( [0]=>SimpleXMLElement对象 ( [名称]=>活动 [值]=>1 ) [1] =>SimpleXMLElement对象 ( [名称]=>用户 [值]=>fred ) [2] =>SimpleXMLElement对象 ( [名称]=>消息 [值]=>这是另一条消息 ) [3] =>SimpleXMLElement对象 ( [名称]=>时间 [值]=>1241334690 ) [4] =>SimpleXMLElement对象 ( [名称]=>id [值]=>1241334690703 ) [5] =>SimpleXMLElement对象 ( [名称]=>ip [值]=>10.10.10.2 ) ) ) ) 那么,我需要什么代码来遍历每个对象项呢?我希望遍历每个对象项,并像处理返回的mySQL查询一样进行处理。例如,我可以查询SimpleDB,然后遍历SimpleXML,以便在页面上显示结果

或者,如何将整个shebang转换为一个数组


我是SimpleXML新手,因此如果我的问题不够具体,我向您道歉。

您可以在
foreach
循环中使用
SimpleXML
对象(或其属性)。如果您想循环所有“记录”,可以使用类似的方法
//Loop through all the members of the Item array 
//(essentially your two database rows).
foreach($SimpleXML->body->QueryWithAttributesResult->Item as $Item){
    //Now you can access the 'row' data using $Item in this case 
    //two elements, a name and an array of key/value pairs
    echo $Item->Name;
    //Loop through the attribute array to access the 'fields'.
    foreach($Item->Attribute as $Attribute){
        //Each attribute has two elements, name and value.
        echo $Attribute->Name . ": " . $Attribute->Value;
    }
}
foreach($SimpleXML->body->QueryWithAttributesResult->Item as $Item){
    foreach($Item->Attribute as $Attribute){
        $rows[$Item->Name][$Attribute->Name] = $Attribute->Value;
    }
}

//Now you have an array that looks like:
$rows['message12413344443260']['active'] = 1;
$rows['message12413344443260']['user'] = 'john';
//etc.
// 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));
$response_array = json_decode(json_encode($response),true);
get_object_vars($simpleXMLElement);
// $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;
}
function parseXML(SimpleXMLElement $xml) : array
{
    $array = [];

    foreach(iterator_to_array($xml, TRUE) as $key => $value)
        $array[$key] = ($value->count() > 1) ? parseXML($value) : (string)$value;

    return $array;
}