为什么我无法以XML格式查看结果?

时间:2012-11-24 05:59:53

标签: php rest curl yahoo-api

我试图使用雅虎的内容分析,这似乎很容易从here使用

但每当我执行我的代码时,我得到以下输出,因为它是:

Italian sculptors the Virgin Mary painters http://en.wikipedia.com/wiki/Painting http://en.wikipedia.com/wiki/Adobe_Photoshop http://en.wikipedia.com/wiki/Still_life http://en.wikipedia.com/wiki/Avant-garde http://en.wikipedia.com/wiki/In_the_Sky http://en.wikipedia.com/wiki/Potato 1

我想要的是查看使用XML标记构建的XML文档,就像点击this链接

时显示的那样

此外,我所看到的输出源代码(来自浏览器......右键单击>查看源代码):

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2012-11-24T05:54:55Z" yahoo:lang="en-US"><results><entities xmlns="urn:yahoo:cap">
    <entity score="0.784327">
      <text end="16" endchar="16" start="0" startchar="0">Italian sculptors</text>
    </entity>
    <entity score="0.78097">
      <text end="72" endchar="72" start="58" startchar="58">the Virgin Mary</text>
    </entity>
    <entity score="0.509566">
      <text end="29" endchar="29" start="22" startchar="22">painters</text>
      <wiki_url>http://en.wikipedia.com/wiki/Painting</wiki_url>
      <related_entities>
        <wikipedia>
          <wiki_url>http://en.wikipedia.com/wiki/Adobe_Photoshop</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/Still_life</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/Avant-garde</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/In_the_Sky</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/Potato</wiki_url>
        </wikipedia>
      </related_entities>
    </entity>
  </entities></results></query><!-- total: 191 -->
<!-- engine6.yql.ac4.yahoo.com -->
1

以下是我的代码:

<?php
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://query.yahooapis.com/v1/public/yql');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, "q=select * from contentanalysis.analyze where text='Italian sculptors and painters of the renaissance favored the Virgin Mary for inspiration';");
curl_setopt($c,CURLOPT_HEADER,0);
$op=curl_exec ($c);
curl_close ($c); 
echo $op;
?>

3 个答案:

答案 0 :(得分:4)

当发送的标头为Content-type: text/html时,这就是浏览器中XML的显示方式。链接到显示格式化XML的演示示例使用一些特殊格式来使其看起来像这样。您需要将标题设置为text / xml,如header('Content-type: text/xml');,然后输出应显示格式。

header('Content-type: text/xml');
echo $op;

您也可以输出以下内容:

echo '<pre>';
echo htmlentities($op);
echo '</pre>';

以上解释了为什么XML在浏览器中显示未格式化并演示如何解决这个问题。 OP的主要问题是由于输出末尾的杂散字符串,他的XML格式不正确。以下内容涉及:

$r = 'http://query.yahooapis.com/v1/public/yql';
$p = "q=select * from contentanalysis.analyze where text='Italian sculptors and painters of the renaissance favored the Virgin Mary for inspiration'"; 

$c = curl_init($r);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $p);
curl_setopt($c, CURLOPT_HEADER, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$op = curl_exec ($c);
curl_close ($c); 

if (!($xml = strstr($op, '<?xml'))) {
    $xml = null;
}

header('Content-type: text/xml');
echo $xml;

答案 1 :(得分:1)

如果您在浏览器中看到了该结果。你应该只是查看源代码。这将显示包括标签在内的一切。因为brousr不会显示标签,只是内容。

答案 2 :(得分:0)

您尚未使用header方法指定Content-Type HTTP标头。因此,PHP正在输出其默认的Content-Type text/html,并且浏览器将XML标记视为无效的HTML。

为您的数据输出正确的内容类型。

header("Content-Type: application/xml");