2009-02-18 37 views
30

Invoco el método PHP cURL en un servidor y la respuesta es de tipo XML. cURL está guardando la salida (después de eliminar las etiquetas) en una variable de tipo escalar. ¿Hay alguna manera de almacenarlo en un objeto/hash/array para que sea fácil de analizar?PHP cURL, extraer una respuesta XML

+0

Podría extenderse sobre lo que entendemos por "después de quitar las etiquetas". –

Respuesta

96
<?php 
function download_page($path){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$path); 
    curl_setopt($ch, CURLOPT_FAILONERROR,1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
    $retValue = curl_exec($ch);   
    curl_close($ch); 
    return $retValue; 
} 

$sXML = download_page('http://alanstorm.com/atom'); 
$oXML = new SimpleXMLElement($sXML); 

foreach($oXML->entry as $oEntry){ 
    echo $oEntry->title . "\n"; 
} 
+13

¡Esta respuesta todavía ayuda después de 3 años! gracias – Vimalnath

+4

¡Todavía lo hace ahora! – JohnnyQ

+5

@Vimal 5 años, para ser más precisos – Peon

2

no, CURL no tiene nada con el análisis XML, no sabe nada sobre el contenido devuelto. sirve como proxy para obtener contenido. depende de ti qué hacer con eso.

uso de JSON si es posible (y json_decode) - es más fácil trabajar con él, si no es posible, utilizar cualquier librería XML para parsin como domxml: http://php.net/domxml

+0

Estoy de acuerdo con eso. Pero, ¿por qué no se muestran las etiquetas? Hago un eco. ¿Es por el navegador? – Rakesh

+0

sí, el navegador trata XML como (X) HTML, por lo que si se encuentra> o <, se trata como una etiqueta normal ... – dusoft

+0

Si repite htmlentities (...) verá el XML completo – Greg

7

Sólo añadir header('Content-type: application/xml'); antes de eco de la Respuesta XML y verá una página XML.

2

Ejemplo:

<songs> 
<song dateplayed="2011-07-24 19:40:26"> 
    <title>I left my heart on Europa</title> 
    <artist>Ship of Nomads</artist> 
</song> 
<song dateplayed="2011-07-24 19:27:42"> 
    <title>Oh Ganymede</title> 
    <artist>Beefachanga</artist> 
</song> 
<song dateplayed="2011-07-24 19:23:50"> 
    <title>Kallichore</title> 
    <artist>Jewitt K. Sheppard</artist> 
</song> 

a continuación:

<?php 
$mysongs = simplexml_load_file('songs.xml'); 
echo $mysongs->song[0]->artist; 
?> 

de salida en su navegador: nave de los nómadas

créditos: http://blog.teamtreehouse.com/how-to-parse-xml-with-php5

1

sencillo archivo XML de carga ..

$xml = @simplexml_load_string($retValuet); 

$status = (string)$xml->Status; 
$operator_trans_id = (string)$xml->OPID; 
$trns_id = (string)$xml->TID; 

?>

2
$sXML = download_page('http://alanstorm.com/atom'); 
// Comment This  
// $oXML = new SimpleXMLElement($sXML); 
// foreach($oXML->entry as $oEntry){ 
// echo $oEntry->title . "\n"; 
// } 
// Use json encode 
$xml = simplexml_load_string($sXML); 
$json = json_encode($xml); 
$arr = json_decode($json,true); 
print_r($arr); 
+0

página_descarga(), ¿en serio? Al menos cuando sugiera una función, adhiérase a las funciones integradas o defina las que está proponiendo. Los principiantes pueden perderse fácilmente. Le sugiero que edite esto y lo reemplace con un simple archivo_get_contents() el menos. – Darthur