如何从PHP中的SimpleXmlElement对象读取值

时间:2019-09-01 08:59:03

标签: php arrays json xml simplexml

我找到了许多有关问题的答案,但仍然无法实现我的目标。 我有一个API端点,该端点返回this

我想读取API返回的所有数据。这是我的代码:

<?php
  $xml=json_decode(json_encode(file_get_contents('http://ecarrefour.com/test/api/saveProducts.php')),true);
  $val= $xml->availability;
  echo $val; 
?>

我遇到以下错误:

Trying to get property of non-object in C:\xampp\htdocs\work\index.php on line 4

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我注意到您的代码存在一些问题:

第一个问题是传递给json_decode的true参数,该参数会将JSON解码为array和NOT对象。 json_decode默认解码为object,但是如果将true作为第二个参数传递,则会得到一个数组。

这就是为什么您收到错误消息的原因,因为在您的情况下$ xml是一个数组。

我要注意的另一个问题是API脚本的输出。该输出类似于print_r输出,这是不正确的。

这是您需要做的:

  1. 在API脚本中,不要print_r($ simpleXmlObject)。您可以在simpleXml对象上使用asXML方法来获取XML,然后可以将其输出。
  2. 在您的客户端脚本中,首先运行file_get_contents以获取所需的XML。
  3. 然后,您可以使用以下类似方法在该XML的客户端上创建simpleXML对象:

$xml = simplexml_load_string($xml_string);

  1. 现在,您可以在$ xml上执行从json_decode到json_encode的技巧,将其从SimpleXML转换为数组或对象。

应该可以解决问题。