【发布时间】:2014-07-28 01:47:25
【问题描述】:
我有一个与此类似的 XML 文件:
<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
有人可以帮我吗?我做错了什么?
我希望我的 $object 看起来像这样:
//json_encode($object);
{
"currentTime":"2014-06-06 17:28:16",
"name":"Mark",
"surname":"Smith"
}
Edit1:添加 print_r 值
【问题讨论】:
-
您正在处理一个 simplexml 对象。 simplexml 树中的每个节点都是一个对象,即使它只能包含一个项目。 simplexml 没有定义结构的 DTD,因此它构建了一个可以处理任何 xml 文档的开放式结构。所以
$xml->name将是一个可能值的数组,即使它只有一个项目。 -
为了让你得到你想要的输出,你必须改变你的 XML 或者做一些跳跃。 'name' 和 'surname' 都是 'result' 的子级,
json_encode的结果符合预期。当您print_r($object)时,您会得到什么? -
Array ([currentTime] => SimpleXMLElement Object ([0] => 2014-06-06 17:52:50)[name] => SimpleXMLElement Object ([0] => Mark) [姓] => SimpleXMLElement 对象([0] => 史密斯)