代码之家  ›  专栏  ›  技术社区  ›  Codex73

simplexmlement到php数组[duplicate]

  •  19
  • Codex73  · 技术社区  · 14 年前

    这个问题已经有了答案:

    变量 $d 来自 file_get_contents 函数指向URL。

    $answer = @new SimpleXMLElement($d);
    

    下面是 print_r($answer) :

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

    如何检索每个元素的值并添加到数组中?我想不出来。

    5 回复  |  直到 5 年前
        1
  •  10
  •   Alessio Cantarella    5 年前

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

    $array = array();
    foreach($answer as $k => $v) {
      $array[$k] = $v;
    }
    
        2
  •  46
  •   dkinzer    14 年前

    在这种简单的情况下,类型铸造也将起作用:

    $my_array = (array)$answer
    
        3
  •  37
  •   Damian Alberto Pastorini    9 年前

    这应该有效:

    $xml = simplexml_load_string($xmlstring);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);
    
        4
  •  4
  •   UnstableFractal    6 年前

    这个函数有问题,因为当文本介于 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;
    }
    
        5
  •  0
  •   user2960279    11 年前

    此函数将xml simplexml recursive解析为array recursive

    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;
    }