的SimpleXMLElement到PHP数组[重复]

问题描述 投票:19回答:5

这个问题已经在这里有一个答案:

可变$d来自file_get_contents功能的URL。

$answer = @new SimpleXMLElement($d);

下面是print_r($answer)的输出:

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

我怎样才能检索每个元素的值,并添加到一个数组?我无法弄清楚。

php xml arrays simplexml
5个回答
10
投票

$answer已经可以作为一个数组。如果你希望把它放在一个真正的数组,你可以做到这一点,

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

48
投票

在这个简单的例子类型转换也将工作:

$my_array = (array)$answer

38
投票

这应该工作:

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

5
投票

我有这个功能的问题,因为每一个XML子类型转换到一个数组中可能会产生问题文本时CDATA标记之间。

我通过检查类型转换到一个数组的结果是空的固定于此。如果是这样它强制转换为字符串,你会得到正确的结果。

这是我与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;
}

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.