【问题标题】:How to read values from SimpleXmlElement object in PHP如何从 PHP 中的 SimpleXmlElement 对象中读取值
【发布时间】:2020-01-04 18:18:39
【问题描述】:

我找到了很多关于我的问题的答案,但我仍然无法实现我的目标。 我有一个 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

任何帮助将不胜感激。

【问题讨论】:

  • json_decode(..., true) 返回一个数组。如果其他一切都正确,请尝试使用json_decode(..., false)。但我不知道当您的问题是关于 SimpleXmlElement object in PHP 时,您为什么使用 JSON 函数。
  • URL ecarrefour.com/test/api/saveProducts.php 没有返回有效的 XML。它只是返回一些调试数组。

标签: php arrays json xml simplexml


【解决方案1】:

我注意到您的代码有几个问题:

第一个问题是传递给 json_decode 的 true 参数,它将 JSON 解码为数组而不是对象。 json_decode 默认解码为对象,但如果您将 true 作为第二个参数传递,则会得到一个数组。

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

我注意到的另一个问题是 API 脚本的输出。该输出看起来像 print_r 输出,这是不正确的。

这是你需要做的:

  1. 在 API 脚本中,不要打印_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 转换为数组或对象。

这应该可以解决问题。

【讨论】:

  • @SorinNuncaI 我无法修改 API,因为它不在我的最后,你能提供一个使用相同东西的解决方案吗?
  • @mubsher 您可能对这里的 print_r_reverse 函数有一些运气:php.net/manual/en/function.print-r.php#121259 我没有尝试过,但您应该能够在 file_get_contents 结果上运行该函数以将其转回SimpleXML 对象直接。值得一试。
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 2011-02-14
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多