Почему мой файл simplexml_load_file не работает?

Вопрос: Я застрял в получении XML-контента с помощью simplexml_load_file, любой идеи, почему он не работает? Это имеет какое-то отношение к источнику ниже?.. $Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS'; $XML=simplexml_load_file($Url); Лучший ответ: Для причины, если вы откроете эту ссылку в браузере, это xml. Если вы пытаетесь получить я через php, это JSON. попробуйте этот код $Url='http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS'; $fileContent = json_decode(file_get_contents($Url)); Ответ №1

Вопрос:

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

$Url=’http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS’; $XML=simplexml_load_file($Url); Лучший ответ:

Для причины, если вы откроете эту ссылку в браузере, это xml. Если вы пытаетесь получить я через php, это JSON. попробуйте этот код

$Url=’http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS’; $fileContent = json_decode(file_get_contents($Url)); Ответ №1

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

$Url=’http://datacenter.biathlonresults.com/modules/sportapi/api/CupResults?CupId=BT1415SWRLCP__SMTS’; $XML=simplexml_load_file(file_get_contents($Url)); Ответ №2

Выяснилось, что file_get_contents возвращает JSON так:

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

делает трюк…

Ответ №3

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

Прежде всего, вы не выполняете проверку ошибок. simplexml_load_file() вернет FALSE если он не сможет открыть файл.

$xml = simplexml_load_file($url); if (!$xml) { // error opening the URL return false; }

Это еще не очень информативно, теперь вы можете просто включить публикацию/протоколирование ошибок PHP, чтобы увидеть, какие ошибки создаются:

Предупреждение: simplexml_load_file(): : ошибка парсера: ожидаемый стартовый тег, ‘<‘ не найден в […]

Предупреждение: simplexml_load_file(): {“AsOf”: “2014-12-22T11: 45: 50.5976703 + 00: 00”, “RaceCount”: 25, “Rows”: [{“Ранг”: “1”, “в […]

Предупреждение: simplexml_load_file(): ^ в […]

Что уже сигнализирует, что HTTP-запрос к этому URL-адресу не предоставляет XML, а JSON (см. Второе предупреждение).

Это легко проверить, сообщив серверу о принятии XML здесь:

stream_context_set_default([‘http’ => [‘header’ => «Accept: text/xml»]]); $xml = simplexml_load_file($url);

который теперь только работает, сервер теперь предоставляет 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>[…]

Этот пример кода является более короткой версией ответа на очень похожий вопрос, который охватывает одно и то же основание:

  • Невозможно прочитать XML с помощью simplexml_load_file PHP

Такое поведение типично для Microsoft-IIS Server с ASP.NET, скорее всего, с компонентом REST API.

Оцените статью
Добавить комментарий