2009-01-13 27 views
8

Tengo un sitio impulsado por PHP que incluye una fuente de stock XML, que se sirve de forma remota desde ASP (es decir, la URL de alimentación XML es de la orden: http://remote.com/client.asp).Comprueba si el archivo remoto está bien formado XML con PHP

Como el feed a menudo no está disponible (me refiero a que el sitio devuelve un error de ASP) me gustaría comprobar si el feed está bien formado XML antes de incluirlo. Mi función url_exists habitual no funciona, ya que, por supuesto, la URL existe incluso cuando está 'erroring'.

TIA.

+1

Nota: tenga cuidado con la terminología. Lo que está describiendo suena como XML "bien formado", que significa algo diferente al XML "válido". – cletus

+0

Muy correcto cletus (gracias) edición ahora ... – da5id

Respuesta

21

Usa cURL para obtener el resultado y simplexml para comprobar si el XML es well-formed.

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "http://remote.com/client.asp"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($curl); 
curl_close($curl); 
if (simplexml_load_string($output)) { 
    // well-formed XML 
} else { 
    // it isn't 
} 
+0

Gracias. Ya estoy usando algo muy similar a eso, y es este script el que a menudo arroja un error. Aunque estoy usando simplexml_load_file, ¿habría alguna diferencia con simplexml_load_string? – da5id

+0

Al parecer, así que ahora todo está bien. Gracias de nuevo, marcando la respuesta como aceptada. – da5id

+0

Tengo un problema con SimpleXML y es muy extraño. Aparentemente simplexml_load_file() de URL y simplexml_load_string() del resultado de URL de cURL podría obtener resultados diferentes. Uno podría fallar mientras que otro podría funcionar ... No puedo entender cómo sucedió eso. Echando un vistazo a mi función cURL ahora – fred

Cuestiones relacionadas