Есть две маленькие (но общие) ошибки с вашим кодом, которые мешают вам узнать, что здесь происходит самостоятельно быстро (и как найти решение).
Прежде всего, вы не проверяете ошибки. simplexml_load_file()
вернет FALSE
, если он не сможет открыть файл.
$xml = simplexml_load_file($url);
if (!$xml) {
// error opening the URL
return false;
}
Это еще не очень информативно, вы можете теперь просто включить PHP отчетов об ошибках/протоколирование на самом деле увидеть, какие ошибки будут созданы:
Предупреждение: simplexml_load_file(): HTTP : // центров обработки данных. 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():^в [...]
Что уже сигнализирует о том, что запрос HTTP на этот URL не содержит 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, которая охватывает то же самое основание:
Это поведение типично для Microsoft-IIS Server с ASP.NET, скорее всего, с некоторым компонентом API REST.
Это не файл. Это URL. –
Вы правы, я думал, что это будет что-то с URL-адресом, но этот url генерирует xml-выход, не так ли? Можете ли вы дать мне совет, как получить результат? –
@MichalSlesingr: Пожалуйста, включите отчет об ошибках PHP и ведение журнала. Затем взгляните на фактические сообщения об ошибках. См. Также: [Как получить полезные сообщения об ошибках в PHP?] (Http://stackoverflow.com/q/845021/367456) – hakre