2012-08-16 95 views
0

我在嘗試使用php來使用webservice時遇到一些問題。無法用simplexml_load_string讀取webservice/php

第一部分似乎工作正常,當使用curl來獲取xml時。

但試圖使用simplexml_load_string的時候,我發現了以下錯誤:

*「致命錯誤:錯誤讀取XML在/home/sites/site1/web/DataDriver/pruebas/dev_lee_ws2.php弦上線35" *

代碼被寫成如下:

$sGLN = "7505000010064"; 
$sUsuario = "DISTRIBU"; 
$sContrasena = "DISTRIBU"; 
$sGLNPublicador = ""; 
$sGTIN = "7500112045058"; 

$url = "http://demo.syncfonia.com.mx/ws/wsexportaproducto/Productos.asmx/ObtieneProducto?GLN=$sGLN&Usuario=$sUsuario&Contrasena=$sContrasena&GLNPublicador=$sGLNPublicador&GTIN=$sGTIN"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

echo $result = curl_exec($ch); 

curl_close($ch); 

if(!$xmlobj=simplexml_load_string($result)){ 
    echo "<br>"; 
    trigger_error('Error reading XML string',E_USER_ERROR); 
} 
echo 'Displaying email addresses of XML string...<br />'; 
foreach($xmlobj as $Exportacion){ 
    echo 'Values of email nodes: '.$Exportacion->refpaismercado.'<br />'; 
} 

同樣在這裏是XML的結構:

<DataSet xmlns="http://tempuri.org/wsexportaproducto/Productos"> 
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"> 
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
<xs:complexType> 
<xs:choice minOccurs="0" maxOccurs="unbounded"> 
<xs:element name="Exportacion"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="gtin" type="xs:string" minOccurs="0"/> 
<xs:element name="gtinreemplazado" type="xs:string" minOccurs="0"/> 
<xs:element name="refidcateglobal" type="xs:string" minOccurs="0"/> 
<xs:element name="refidcatelocal" type="xs:decimal" minOccurs="0"/> 
<xs:element name="gln" type="xs:string" minOccurs="0"/> 
<xs:element name="glnfabricante" type="xs:string" minOccurs="0"/> 
<xs:element name="nombrefabricante" type="xs:string" minOccurs="0"/> 
<xs:element name="refpaismercado" type="xs:string" minOccurs="0"/> 
<xs:element name="iniciovigenciadn" type="xs:dateTime" minOccurs="0"/> 
<xs:element name="finvigenciadn" type="xs:dateTime" minOccurs="0"/> 
<xs:element name="vida" type="xs:decimal" minOccurs="0"/> 
<xs:element name="nomproducto" type="xs:string" minOccurs="0"/> 
<xs:element name="marca" type="xs:string" minOccurs="0"/> 
<xs:element name="descproducto" type="xs:string" minOccurs="0"/> 
<xs:element name="descripcioncorta" type="xs:string" minOccurs="0"/> 
<xs:element name="profundo" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidprofundo" type="xs:string" minOccurs="0"/> 
<xs:element name="alto" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidalto" type="xs:string" minOccurs="0"/> 
<xs:element name="ancho" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidancho" type="xs:string" minOccurs="0"/> 
<xs:element name="pesobruto" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidpesobruto" type="xs:string" minOccurs="0"/> 
<xs:element name="pesoempaque" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidpesoempaque" type="xs:string" minOccurs="0"/> 
<xs:element name="contenidoneto" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidcontenidoneto" type="xs:string" minOccurs="0"/> 
<xs:element name="escontenidovariable" type="xs:boolean" minOccurs="0"/> 
<xs:element name="refembalaje" type="xs:string" minOccurs="0"/> 
<xs:element name="esretornable" type="xs:boolean" minOccurs="0"/> 
<xs:element name="factorestiba" type="xs:decimal" minOccurs="0"/> 
<xs:element name="esunidadminima" type="xs:boolean" minOccurs="0"/> 
<xs:element name="contenidos" type="xs:string" minOccurs="0"/> 
<xs:element name="refpaisorigen" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadcolorcodigo" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadcoloragencia" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadcolor" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadtalleagencia" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadtallecodigo" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadtalle" type="xs:string" minOccurs="0"/> 
<xs:element name="esunidadordenable" type="xs:boolean" minOccurs="0"/> 
<xs:element name="cantminimapedir" type="xs:decimal" minOccurs="0"/> 
<xs:element name="multiplopedir" type="xs:decimal" minOccurs="0"/> 
<xs:element name="esfacturable" type="xs:boolean" minOccurs="0"/> 
<xs:element name="esunidadembarque" type="xs:boolean" minOccurs="0"/> 
<xs:element name="nrocapasartcomercial" type="xs:decimal" minOccurs="0"/> 
<xs:element name="nroartcomercialesporcapa" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidadesporpallet" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidporcapa" type="xs:decimal" minOccurs="0"/> 
<xs:element name="nrodecapas" type="xs:decimal" minOccurs="0"/> 
<xs:element name="submarca" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadtipo" type="xs:string" minOccurs="0"/> 
<xs:element name="oferta" type="xs:boolean" minOccurs="0"/> 
<xs:element name="dscompania" type="xs:string" minOccurs="0"/> 
<xs:element name="nombregen" type="xs:string" minOccurs="0"/> 
<xs:element name="variedadsabor" type="xs:string" minOccurs="0"/> 
<xs:element name="continentes" type="xs:string" minOccurs="0"/> 
<xs:element name="reftiponivel" type="xs:string" minOccurs="0"/> 
<xs:element name="esunidadconsumo" type="xs:boolean" minOccurs="0"/> 
<xs:element name="pesoneto" type="xs:decimal" minOccurs="0"/> 
<xs:element name="unidpesoneto" type="xs:string" minOccurs="0"/> 
<xs:element name="cantidadtotalcontenida" type="xs:decimal" minOccurs="0"/> 
<xs:element name="reftipogtin" type="xs:string" minOccurs="0"/> 
<xs:element name="esprivado" type="xs:boolean" minOccurs="0"/> 
<xs:element name="statussecodat" type="xs:string" minOccurs="0"/> 
<xs:element name="accion" type="xs:int" minOccurs="0"/> 
<xs:element name="fechaaccion" type="xs:int" 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=""> 
<Exportacion diffgr:id="Exportacion1" msdata:rowOrder="0"> 
<gtin>07500112045058</gtin> 
<refidcateglobal>10005730</refidcateglobal> 
<gln>7505000010064</gln> 
<refpaismercado>484</refpaismercado> 
<iniciovigenciadn>2012-08-09T00:00:00-05:00</iniciovigenciadn> 
<finvigenciadn>4999-12-31T23:59:59-06:00</finvigenciadn> 
<marca>PINTACOLOR</marca> 
<descproducto>PINTACOLOR BLANCO</descproducto> 
<descripcioncorta>PINTURA PINTACOLOR 18 L</descripcioncorta> 
<profundo>40.000000000000000</profundo> 
<unidprofundo>CM</unidprofundo> 
<alto>60.000000000000000</alto> 
<unidalto>CM</unidalto> 
<ancho>40.000000000000000</ancho> 
<unidancho>CM</unidancho> 
<pesobruto>26.200000000000000</pesobruto> 
<unidpesobruto>KG</unidpesobruto> 
<unidpesoempaque>KG</unidpesoempaque> 
<escontenidovariable>false</escontenidovariable> 
<esretornable>false</esretornable> 
<esunidadminima>true</esunidadminima> 
<contenidos/> 
<esunidadordenable>false</esunidadordenable> 
<esfacturable>true</esfacturable> 
<esunidadembarque>false</esunidadembarque> 
<oferta>false</oferta> 
<dscompania>DISTRIBUIDOR</dscompania> 
<nombregen>PINTURA</nombregen> 
<continentes/> 
<reftiponivel>EA</reftiponivel> 
<esunidadconsumo>false</esunidadconsumo> 
<esprivado>false</esprivado> 
<statussecodat>2</statussecodat> 
</Exportacion> 
</NewDataSet> 
</diffgr:diffgram> 
</DataSet> 
+0

打開http://www.gs1mexico.org/DataDriver/pruebas/dev_lee_ws2.php並右鍵單擊並選擇「查看源代碼」 – alfasin 2012-08-16 21:52:58

+0

當我這樣做時,我可以看到web服務返回的XML,就我而言可以看到它是正確的。仍然得到錯誤 – user1604435 2012-08-16 22:01:28

+0

您發佈的代碼只包含24行 - 所以這裏的東西沒有任何意義(因爲錯誤是在第35行觸發) – alfasin 2012-08-16 22:03:05

回答

0

嘗試刪除第8行:從$result

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 

+0

刪除了行,仍然沒有工作:( – user1604435 2012-08-16 22:24:26

+0

我現在看到,內容類型是'text/html' - 它應該是'text/xml'。將以下行添加到dev_lee_ws2.php:'header('內容類型:text/xml');' – alfasin 2012-08-16 22:43:55

+0

謝謝alfasin,當我把它放在最後的時候,我得到了屏幕上顯示的xml,但仍然出現錯誤,我不想顯示整個xml,我正在尋找得到一些XML的數據,這就是爲什麼我試圖使用simplexml_load_string – user1604435 2012-08-16 23:29:43

0

我能夠在他的名字替換用冒號:所有屬性來解決這個問題,像diffgr:id和等,在解析之前simplexml_load_string();