我一直坚持使用simplexml_load_file获取XML内容,不知道为什么它不起作用?它与下面的源有关吗?..
$Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS';
$XML=simplexml_load_file($Url);
答案 0 :(得分:0)
您应该使用:
$Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS';
$XML=simplexml_load_file(file_get_contents($Url));
答案 1 :(得分:0)
发现file_get_contents返回JSON所以:
$ X = json_decode(的file_get_contents($ URL));
诀窍......
答案 2 :(得分:0)
因为如果你在浏览器中打开这个链接,那就是xml。如果你试图让我通过PHP它是JSON。 试试这段代码
$Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS';
$fileContent = json_decode(file_get_contents($Url));
答案 3 :(得分:0)
您的代码中存在两个很少(但很常见)的错误,这些错误会阻止您快速找到自己发生的事情(以及如何找到解决方案)。
首先,您没有进行任何错误检查。如果无法打开文件,simplexml_load_file()
将返回FALSE
。
$xml = simplexml_load_file($url);
if (!$xml) {
// error opening the URL
return false;
}
这还不是很有用,您现在可以启用PHP错误报告/日志记录来实际查看创建的错误:
警告:simplexml_load_file():http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId = BT1415SWRLCP__SMTS:1:解析器错误:开始预期标记,'<'在[...]
中找不到警告:simplexml_load_file():{" AsOf":" 2014-12-22T11:45:50.5976703 + 00:00"," RaceCount":25 "行":[{"秩":" 1""在[...]
警告:simplexml_load_file():^ [...]
这已经表明对该URL的HTTP请求不提供XML而是提供JSON(请参阅第二个警告)。
通过告诉服务器在这里接受XML,很容易验证:
stream_context_set_default(['http' => ['header' => "Accept: text/xml"]]);
$xml = simplexml_load_file($url);
whcih现在正常工作,服务器现在提供XML,可以正确解析并创建 SimpleXMLElement 。
完整的代码示例:
<?php
$url = 'http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS';
stream_context_set_default(['http' => ['header' => "Accept: text/xml"]]);
$xml = simplexml_load_file($url);
if (!$xml) {
// error opening the file
var_dump(libxml_get_errors());
return false;
}
$xml->asXML('php://output');
输出:
<?xml version="1.0"?>
<CupResultsResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/sportapi"><AsOf>2014-12-22T11:45:50.5976703+00:00</AsOf><RaceCount>25</RaceCount><Rows><CupResultRow>[...]
此代码示例是the answer of a very similar question的较短版本,涵盖相同的基础:
对于运行ASP.NET的Microsoft-IIS Server,这种行为似乎很常见,很可能是一些REST API组件。