解析JSON或atom + xml响应不起作用(PHP)

时间:2014-05-30 18:42:44

标签: php xml json curl

我正在使用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不能处理该元素。

为什么我无法解析任何这些数据?

1 个答案:

答案 0 :(得分:0)

我能够通过将CURLOPT_RETURNTRANSFER值添加到请求中来完成这项工作:

curl_setopt($curlConn,CURLOPT_RETURNTRANSFER,1); 

使用JSON标头,我使用了json_decode,它使它成为一个数组。在头文件中使用atom + xml,我使用新的SimpleXMLElement()将其转换为数组。