【问题标题】:Reading XML file - strange PHP object notation读取 XML 文件 - 奇怪的 PHP 对象表示法
【发布时间】: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-&gt;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] => 史密斯)

标签: php xml


【解决方案1】:

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

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

和做的一样

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

当你这样做时

echo $data->currentTime;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2021-02-27
    • 2017-01-19
    相关资源
    最近更新 更多