2014-12-06 4 views
-1

Я застрял в получении XML-контента с помощью simplexml_load_file, любая идея, почему он не работает? ? Есть ли у него что-то делать с ниже источника ..Почему мой файл simplexml_load_file не работает?

$Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS'; 
$XML=simplexml_load_file($Url); 
+1

Это не файл. Это URL. –

+0

Вы правы, я думал, что это будет что-то с URL-адресом, но этот url генерирует xml-выход, не так ли? Можете ли вы дать мне совет, как получить результат? –

+0

@MichalSlesingr: Пожалуйста, включите отчет об ошибках PHP и ведение журнала. Затем взгляните на фактические сообщения об ошибках. См. Также: [Как получить полезные сообщения об ошибках в PHP?] (Http://stackoverflow.com/q/845021/367456) – hakre

ответ

0

По FOM причине, если вы открыть ссылку в браузере это XML. Если вы пытаетесь получить i через php, это JSON. попробовать этот код

$Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS'; 

$fileContent = json_decode(file_get_contents($Url)); 
+0

Yup, я узнал то же самое, в любом случае спасибо ...;) –

0

Вы должны использовать:

$Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS'; 
$XML=simplexml_load_file(file_get_contents($Url)); 
+0

Это не решило проблему, все еще не работает ... Я также попробовал file_get_contents, а затем simplexml_load_string, заканчивая идеи ...:/ –

+0

И вы тоже не должны ее использовать. Interally, file_get_contents, а также simplexml_load_file используют точно такие же подпрограммы. Кроме того, код, приведенный в ответе, является неправильным, скорее всего, это означает использование simplexml_load_string вместо simplexml_load_file. -1 для этого. – hakre

0

Найдено, что file_get_contents возвращает JSON так:

$ х = json_decode (file_get_contents ($ URL));

делает трюк ...

0

Есть две маленькие (но общие) ошибки с вашим кодом, которые мешают вам узнать, что здесь происходит самостоятельно быстро (и как найти решение).

Прежде всего, вы не проверяете ошибки. 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.

Смежные вопросы