2014-12-06 3 views
-1

simplexml_load_file을 사용하여 XML 콘텐츠를 가져 오는 데 어려움을 겪고 있습니다. 이유는 무엇입니까? ?은 아래의 소스와 함께 할 수있는 뭔가가 있나요 ..왜 내 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

않습니다. PHP를 통해 JSON을 얻으려고한다면 이 코드를 시도

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

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

그래, 나도 같은 것을 알았다. 어쨌든 고마워 ...;) –

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

그리고 그것을 사용해서는 안됩니다. 중간에 file_get_contents와 simplexml_load_file은 똑같은 루틴을 사용합니다. 그 다음으로, 대답에 주어진 코드는 틀린 것일 수 있습니다. simplexml_load_file 대신 simplexml_load_string을 사용하기 쉽습니다. -1. – hakre

0

file_get_contents는 JSON을 너무 반환 것을 찾았

$ X = json_decode (file_get_contents를 ($ Url)); 당신이 XML의 브라우저에서 링크를 열 경우

는 FOM 이유로 트릭 ...

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, "Rows": [{ "Rank": " 1 ","[...]

경고 : simplexml_load_file() : ^에 [...] 이미 URL로 HTTP 요청을 XML하지만 JSON을 (제공하지 않는 신호

두 번째 경고 참조). 쉽게

여기에 XML을 허용하도록 서버를 말하는 의해 유효성을 검사 :

지금 바로 작동 whcih
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>[...] 

이 코드 예는 동일한 지상 커버 the answer of a very similar question 짧은 버전이

이 동작은 ASP.NET, 대부분 REST API 구성 요소를 실행하는 Microsoft-IIS Server에서 일반적인 것처럼 보입니다.