我有一个带有xml标头和xml代码的php文件,名为test.php。
<?php
header('Content-type: text/xml');
$file = file_get_contents('http://api.tradedoubler.com/1.0/vouchers.xml?token=removed');
echo $file;
?>
API中的xml如下所示:
<voucherList>
<voucher>
<id>115</id>
<programId>111</programId>
<programName>Program 111</programName>
<code>AF30C5</code>
<updateDate>1332422674941</updateDate>
<startDate>1332370800000</startDate>
<endDate>1363906800000</endDate>
<title>Voucher number one</title>
<shortDescription>Short description of the voucher.</shortDescription>
<description>This is a long version of the voucher description.</description>
<voucherTypeId>1</voucherTypeId>
<defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)</defaultTrackUri>
<siteSpecific>True</siteSpecific>
</voucher>
<voucher>
<id>116</id>
<programId>111</programId>
<programName>Program 111</programName>
<code>F90Z4F</code>
<updateDate>1332423212631</updateDate>
<startDate>1332370800000</startDate>
<endDate>1363906800000</endDate>
<title>The second voucher</title>
<shortDescription>Short description of the voucher.</shortDescription>
<description>This is a long version of the voucher description.</description>
<voucherTypeId>1</voucherTypeId>
<defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)url(http://www.example.com/product?id=123)</defaultTrackUri>
<siteSpecific>False</siteSpecific>
<landingUrl>http://www.example.com/product?id=123</landingUrl>
</voucher>
</voucherList>
如何将此文件作为xml加载?
以下不起作用:
$xml = simplexml_load_file('test.php');
echo $xml;
我只是得到一个白页。
测试文件保存为php,因为它是动态的。它正在从tradedoubler api加载数据。
也许是api数据加载的方式?
答案 0 :(得分:0)
simplexml_load_file()将xml文件作为对象加载。如果你回显一个对象,它应该在输出中说“对象”。如果你得到一个白页,很可能出现问题(即:检查错误日志)。
您可以print_r($xml);
查看XML对象的内容(如果设置正确)。
如果从print_r语句获得输出,则可以开始访问特定节点和元素:
echo $xml->node[index]->element;
等等。
答案 1 :(得分:0)
我刚刚尝试了您的示例源文件并执行了print_r($xml);
我实际上得到了一个输出。
所以请尝试print_r($xml)
;
我可以访问您的XML(例如,为我工作)
$xml->voucher[0]->id;
那是因为$ xml是一个对象,在这个对象里面有数组(比如凭证),在这个数组里面又有对象。
修改:您改变了OP:
我用x.php尝试了你原来的例子:
<?php
header('Content-type: text/xml');
$file = simplexml_load_file('test.php');
echo $file->voucher[0]->id;
?>
在test.php中我痛风你的xml:
<voucherList>
<voucher>
<id>115</id>
<programId>111</programId>
<programName>Program 111</programName>
<code>AF30C5</code>
<updateDate>1332422674941</updateDate>
<startDate>1332370800000</startDate>
<endDate>1363906800000</endDate>
<title>Voucher number one</title>
<shortDescription>Short description of the voucher.</shortDescription>
<description>This is a long version of the voucher description.</description>
<voucherTypeId>1</voucherTypeId>
<defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)</defaultTrackUri>
<siteSpecific>True</siteSpecific>
</voucher>
<voucher>
<id>116</id>
<programId>111</programId>
<programName>Program 111</programName>
<code>F90Z4F</code>
<updateDate>1332423212631</updateDate>
<startDate>1332370800000</startDate>
<endDate>1363906800000</endDate>
<title>The second voucher</title>
<shortDescription>Short description of the voucher.</shortDescription>
<description>This is a long version of the voucher description.</description>
<voucherTypeId>1</voucherTypeId>
<defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)url(http://www.example.com/product?id=123)</defaultTrackUri>
<siteSpecific>False</siteSpecific>
<landingUrl>http://www.example.com/product?id=123</landingUrl>
</voucher>
</voucherList>
它仍然适用于我。因此,如果您仍然有空白页面,则错误必须位于其他位置。你有error_reporting(E_ALL);
开启吗?
答案 2 :(得分:0)
xml文件加载正常,输出不是空的,只是一些新行。
试
echo $xml->asXML();
编辑: 也许你的php配置会阻止外部网址的file_get_contents(allow_url_fopen = Off)。尝试使用curl或类似的直接请求:
$xml = '';
$fp = fsockopen('api.tradedoubler.com', 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /1.0/vouchers.xml?token=removed HTTP/1.1\r\n"
. "Host: api.tradedoubler.com\r\n"
. "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$xml .= fgets($fp, 128);
}
fclose($fp);
}
if ($xml != '') {
$xmlObject = simplexml_load_string($xml);
if ($xmlObject) {
// do something nasty! or just echo $xml->asXML();
}
}