我有一个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值
答案 0 :(得分:1)
是的,正如您已经注意到$ someSimpleXMLNode返回的类型是一个对象。如果您想要节点值(例如字符串),请使用:
$return_data['currentTime'] = (string)$data->currentTime;
与做
相同$return_data['currentTime'] = $data->currentTime->__toString();
等
当你这样做时
echo $data->currentTime;
节点被自动强制转换为字符串(因为echo只处理字符串)。这是通过对象的__toString方法完成的(通常在php中)。