Foros del Web » Programando para Internet » PHP »

cURL & XML

Estas en el tema de cURL & XML en el foro de PHP en Foros del Web. Estimados, estoy con un tema a la hora de parsear un XML luego de obterner una respuesta, a una consulta del webservice de OCA Envios ...
  #1 (permalink)  
Antiguo 28/04/2014, 10:22
 
Fecha de Ingreso: abril-2014
Mensajes: 5
Antigüedad: 10 años
Puntos: 0
Pregunta cURL & XML

Estimados, estoy con un tema a la hora de parsear un XML luego de obterner una respuesta, a una consulta del webservice de OCA Envios

Esta es la respuesta

<?xml version="1.0" encoding="utf-8"?>
<DataSet xmlns="#Oca_Express_Pak">
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="Tarifador" type="xs:int" minOccurs="0" />
<xs:element name="Precio" type="xs:decimal" minOccurs="0" />
<xs:element name="idTiposervicio" type="xs:int" minOccurs="0" />
<xs:element name="Ambito" type="xs:string" minOccurs="0" />
<xs:element name="PlazoEntrega" type="xs:int" minOccurs="0" />
<xs:element name="Adicional" type="xs:decimal" minOccurs="0" />
<xs:element name="Total" type="xs:decimal" minOccurs="0" />
<xs:element name="XML" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
<Tarifador>15</Tarifador>
<Precio>219.2300</Precio>
<idTiposervicio>3</idTiposervicio>
<Ambito>Nacional 1</Ambito>
<PlazoEntrega>3</PlazoEntrega>
<Adicional>0.0000</Adicional>
<Total>219.2300</Total>
<XML>&lt;row Tarifador="15" Precio="219.2300"/&gt;</XML>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

Y este es el error cuando hago simplexml_load_string(respuesta)

Warning: simplexml_load_string(): namespace warning : xmlns: URI #Oca_Express_Pak is not absolute in C:\xampp\htdocs\Labs\Basicos\curl.php on line 45

Warning: simplexml_load_string(): <DataSet xmlns="#Oca_Express_Pak"> in C:\xampp\htdocs\Labs\Basicos\curl.php on line 45

Warning: simplexml_load_string(): ^ in C:\xampp\htdocs\Labs\Basicos\curl.php on line 45
  #2 (permalink)  
Antiguo 28/04/2014, 10:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: cURL & XML

Desconozco el metodo que estes usando, por lo que recomendación basado en que no se que estás haciendo es que cuando llames la consulta antes de colocarla dentro de simplexml_load_string es usar str_replace y eliminar el atributo xmlns="#Oca_Express_Pak"
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 28/04/2014, 10:31
 
Fecha de Ingreso: abril-2014
Mensajes: 5
Antigüedad: 10 años
Puntos: 0
Respuesta: cURL & XML

Gracias abimaelrc, si haciendo eso se soluciona, quería buscar otra manera de solucionarlo, ya que me parece que hacer un str_replace no es la forma correcta.
  #4 (permalink)  
Antiguo 28/04/2014, 10:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: cURL & XML

Podrías colocar la url que corresponde, como quiera es usando str_replace o preg_replace. Es decir algo como xmlns="http://direccion/va/aqui#Oca_Express_Pak" En ocaciones sucede que las aplicaciones las preparan para que resulte en forma local y los usuarios externos tienen que colocar la dirección manualmente para que les funcione.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 28/04/2014, 10:40
 
Fecha de Ingreso: abril-2014
Mensajes: 5
Antigüedad: 10 años
Puntos: 0
Respuesta: cURL & XML

Esta es toda la consulta que hago,

$params = array('PesoTotal' => '50',
'VolumenTotal' => '0.027',
'CodigoPostalDestino' => '1414',
'CodigoPostalOrigen' => '5403',
'CantidadPaquetes' => '1',
'Cuit' => '30-71407581-7',
'Operativa' => '77790');

$data = http_build_query($params,'','&');
$url = "http://webservice.oca.com.ar/oep_tracking/Oep_Track.asmx/Tarifar_Envio_Corporativo";
$headers = array('Content-Length: ' . strlen($data), 'Content-type: application/x-www-form-urlencoded', 'Host:webservice.oca.com.ar', '');
$curl_handle =curl_init();

curl_setopt_array($curl_handle, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_USERAGENT => 'Oca',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1
));

$http_result = curl_exec($curl_handle);
$error = curl_error($curl_handle);
$http_code = curl_getinfo($curl_handle);
curl_close($curl_handle);

-- Y aqui te dejo la minima documentación que me dan del webservice, por si te llegara a ser de utilidad

http://webservice.oca.com.ar/oep_tracking/Oep_Track.asmx?op=Tarifar_Envio_Corporativo
  #6 (permalink)  
Antiguo 28/04/2014, 10:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: cURL & XML

Si pero intenta lo que te acabo de indicar. Ingresa la dirección que deba ir ahi para que pueda funcionarte. Si no sabes la dirección y no está en la documentación que te brindan, deberías preguntarle a ellos que debe ir ahí.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: namespace, soap, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:02.