SimpleXMLElement到PHP数组

时间:2010-04-28 02:35:02

标签: php xml arrays simplexml

变量$d来自file_get_contents函数到网址。

$answer = @new SimpleXMLElement($d);

以下是print_r($answer)

的输出
SimpleXMLElement Object
(
  [Amount] => 2698
  [Status] => OK
  [State] => FL
  [Country] => USA
)

如何检索每个元素的值并添加到数组中?我无法理解。

5 个答案:

答案 0 :(得分:46)

在这个简单的情况下,类型转换也可以起作用:

$my_array = (array)$answer

答案 1 :(得分:37)

这应该有效:

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

答案 2 :(得分:10)

$answer已经可以作为数组工作了。如果你想把它放在一个真正的数组中,你可以这样做,

$array = array();
foreach($answer as $k => $v) {
  $array[$k] = $v;
}

答案 3 :(得分:5)

我遇到此函数的问题,因为当文本位于CDATA标记之间时,将每个XML子类型转换为数组可能会出现问题。

我通过检查对数组进行类型转换的结果是否为空来修复此问题。如果是这样将它转换为字符串,您将获得正确的结果。

以下是我的修改版本CDATA支持:

function SimpleXML2ArrayWithCDATASupport($xml)
{   
    $array = (array)$xml;

    if (count($array) === 0) {
        return (string)$xml;
    }

    foreach ($array as $key => $value) {
        if (!is_object($value) || strpos(get_class($value), 'SimpleXML') === false) {
            continue;
        }
        $array[$key] = SimpleXML2ArrayWithCDATASupport($value);
    }

    return $array;
}

答案 4 :(得分:0)

此函数将xml simpleXML递归解析为数组递归

function SimpleXML2Array($xml){
    $array = (array)$xml;

    //recursive Parser
    foreach ($array as $key => $value){
        if(strpos(get_class($value),"SimpleXML")!==false){
            $array[$key] = SimpleXML2Array($value);
        }
    }

    return $array;
}