读取XML文件 - 奇怪的PHP对象表示法

时间:2014-06-06 17:45:07

标签: php xml

我有一个XML文件simillar:

<information version="2">
<currentTime>2014-06-06 17:28:16</currentTime>
<result>
<name>Mark</name>
<surname>Smith</surname>
</result>

我用php函数读取它并用函数将其解析为对象,如:

function parse_data($data){
    $return_data['currentTime'] = $data->currentTime;

    $return_data['name'] = $data->result->name;
    $return_data['surname'] = $data->result->surname;

    return $return_data;
}

$xml = simplexml_load_string(file_get_contents($link));
$object = parse_data($xml);

然后,当我在屏幕上回显它时,检查它的外观:

//json_encode($xml);
{
  "@attributes":{"version":"2"},
  "currentTime":"2014-06-06 17:28:16",
  "result":{"name":"Mark","surname":"Smith"}
}

//print_r($xml);
SimpleXMLElement Object ( 
  [@attributes] => Array ( [version] => 2 )
  [currentTime] => 2014-06-06 17:56:30
  [result] => SimpleXMLElement Object (
      [name] => Mark
      [surname] => Smith
  )
)




//json_encode($object);
{
  "currentTime":{"0":"2014-06-06 17:28:16"},
  "name":{"0":"Mark"},
  "surname":{"0":"Smith"}
}

//print_r($object);
Array ( 
  [currentTime] => SimpleXMLElement Object ( [0] => 2014-06-06 17:52:50 )
  [name] => SimpleXMLElement Object ( [0] => Mark)
  [surname] => SimpleXMLElement Object ( [0] =>  Smith )
)

我的代码出了什么问题?他似乎把xml文件中的信息读作数组?由于这种奇怪的符号,我通常不会对这些数据进行操作。

它的行为也是这样的:

echo json_encode($object['name']);  will give ->   {"0":"Mark"}
echo $object['name'];               will give ->    Mark

任何人都可以帮助我吗?我做错了什么?

我希望我的$对象看起来像这样:

//json_encode($object);
{
  "currentTime":"2014-06-06 17:28:16",
  "name":"Mark",
  "surname":"Smith"
}

Edit1:添加了print_r值

1 个答案:

答案 0 :(得分:1)

是的,正如您已经注意到$ someSimpleXMLNode返回的类型是一个对象。如果您想要节点值(例如字符串),请使用:

$return_data['currentTime'] = (string)$data->currentTime;

与做

相同
$return_data['currentTime'] = $data->currentTime->__toString();

当你这样做时

echo $data->currentTime;

节点被自动强制转换为字符串(因为echo只处理字符串)。这是通过对象的__toString方法完成的(通常在php中)。