我正在使用CURL和一个API(OData),它返回JSON或ATOM + XML中的数据(这是使用此API的两个选项,可以在CURLOPT_HTTPHEADER设置中设置)。这是我的代码:
$url = "https://www.mywebsite.com/4.3/TableExample()?".'$filter'."=(IDNumber%20eq%20'115735')%20and%20(StatusID%20eq%202)%20and%20(AnotherID%20eq%207)%20and%20(IDDate%20ge%20datetime'2012-10-24T00:00:00')%20and%20(IDDate%20le%20datetime'2015-10-26T00:00:00')".'&$expand'."=Items";
$curlConn = curl_init($url);
curl_setopt($curlConn,CURLOPT_HTTPHEADER,array('Accept: application/atom+xml'));
//OR FOR JSON
//curl_setopt($curlConn,CURLOPT_HTTPHEADER,array('Accept: application/json'));
$ret = curl_exec($curlConn);
curl_close($curlConn);
这很好用(实际上这段代码只在浏览器中显示响应信息而不必回声等)。
当我返回原子+ xml时,它会在浏览器中返回它,如下所示:
<!--?xml version="1.0" encoding="utf-8" standalone="yes"?-->
<html>
<head></head>
<body>
<feed xml:base="http://www.mywebsite.com/4.3/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<title type="text">TableExample</title>
<id>http://www.mywebsite.com/4.3/TableExample</id>
<updated>2014-05-30T18:37:34Z</updated>
<entry>
<!--DATA RETURNED HERE-->
</entry>
然后是结束标签。这很奇怪,因为它不是完全的XML,也不是完全的HTML。此外,当我尝试解析它使用SimpleXMLElement它没有找到任何东西。我也尝试过simplexml_load_string,但是没有用。当我以JSON格式收到它时,它看起来像普通的JSON代码,但是再次包含在HTML标记中,所以我假设json_decode不能处理该元素。
为什么我无法解析任何这些数据?
答案 0 :(得分:0)
我能够通过将CURLOPT_RETURNTRANSFER值添加到请求中来完成这项工作:
curl_setopt($curlConn,CURLOPT_RETURNTRANSFER,1);
使用JSON标头,我使用了json_decode,它使它成为一个数组。在头文件中使用atom + xml,我使用新的SimpleXMLElement()将其转换为数组。