我试图使用雅虎的内容分析,这似乎很容易从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;
?>
答案 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");