2014-09-10 134 views
2

我需要使用PHP SoapClient解析一些xml。 響應似乎也包含xsd。 下面是我得到的迴應的一個例子。 我歡迎您的意見和貢獻。非常感謝你。PHP解析來自包含xsd的web服務的響應

<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:MainDataTable="PRV_Servicios" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="PRV_Servicios"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="idPRV_Servicios" type="xs:int" minOccurs="0"/> 
          <xs:element name="Servicios" type="xs:string" minOccurs="0"/> 
          <xs:element name="Filler" type="xs:string" minOccurs="0"/> 
          <xs:element name="MarkupAvizo" type="xs:double" minOccurs="0"/> 
          <xs:element name="MarkUpRest" type="xs:double" minOccurs="0"/> 
          <xs:element name="MarkUp" type="xs:double" minOccurs="0"/> 
          <xs:element name="IVA" type="xs:short" minOccurs="0"/> 
          <xs:element name="idPRV_ServiciosIVA" type="xs:int" minOccurs="0"/> 
          <xs:element name="idEMP_Monedas" type="xs:int" minOccurs="0"/> 
          <xs:element name="TipoCalculo1" type="xs:short" minOccurs="0"/> 
          <xs:element name="TipoCalculo2" type="xs:short" 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"> 
    <DocumentElement xmlns=""> 
     <PRV_Servicios diffgr:id="PRV_Servicios1" msdata:rowOrder="0"> 
      <idPRV_Servicios>1</idPRV_Servicios> 
      <Servicios>Aereo</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios2" msdata:rowOrder="1"> 
      <idPRV_Servicios>2</idPRV_Servicios> 
      <Servicios>Autos</Servicios> 
      <Filler/> 
      <MarkupAvizo>8.38</MarkupAvizo> 
      <MarkUpRest>1</MarkUpRest> 
      <MarkUp>10</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios3" msdata:rowOrder="2"> 
      <idPRV_Servicios>3</idPRV_Servicios> 
      <Servicios>Cruceros</Servicios> 
      <Filler/> 
      <MarkupAvizo>12.5</MarkupAvizo> 
      <MarkUpRest>5.5</MarkUpRest> 
      <MarkUp>15</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios4" msdata:rowOrder="3"> 
      <idPRV_Servicios>4</idPRV_Servicios> 
      <Servicios>Excursiones</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>0</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>2</idEMP_Monedas> 
      <TipoCalculo1>0</TipoCalculo1> 
      <TipoCalculo2>0</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios5" msdata:rowOrder="4"> 
      <idPRV_Servicios>5</idPRV_Servicios> 
      <Servicios>Hoteles</Servicios> 
      <Filler/> 
      <MarkupAvizo>12.5</MarkupAvizo> 
      <MarkUpRest>5.5</MarkUpRest> 
      <MarkUp>15</MarkUp> 
      <IVA>0</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>2</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>2</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios6" msdata:rowOrder="5"> 
      <idPRV_Servicios>6</idPRV_Servicios> 
      <Servicios>Otros</Servicios> 
      <Filler/> 
      <MarkupAvizo>12.5</MarkupAvizo> 
      <MarkUpRest>5.5</MarkUpRest> 
      <MarkUp>15</MarkUp> 
      <IVA>0</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>2</idEMP_Monedas> 
      <TipoCalculo1>2</TipoCalculo1> 
      <TipoCalculo2>2</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios7" msdata:rowOrder="6"> 
      <idPRV_Servicios>7</idPRV_Servicios> 
      <Servicios>Trenes</Servicios> 
      <Filler/> 
      <MarkupAvizo>15.5</MarkupAvizo> 
      <MarkUpRest>5.5</MarkUpRest> 
      <MarkUp>22</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios8" msdata:rowOrder="7"> 
      <idPRV_Servicios>8</idPRV_Servicios> 
      <Servicios>Buses</Servicios> 
      <Filler/> 
      <MarkupAvizo>15.5</MarkupAvizo> 
      <MarkUpRest>10</MarkUpRest> 
      <MarkUp>21</MarkUp> 
      <IVA>2</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios9" msdata:rowOrder="8"> 
      <idPRV_Servicios>9</idPRV_Servicios> 
      <Servicios>Global</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios10" msdata:rowOrder="9"> 
      <idPRV_Servicios>10</idPRV_Servicios> 
      <Servicios>Traslados</Servicios> 
      <Filler/> 
      <MarkupAvizo>12.5</MarkupAvizo> 
      <MarkUpRest>5.5</MarkUpRest> 
      <MarkUp>15</MarkUp> 
      <IVA>0</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>2</idEMP_Monedas> 
      <TipoCalculo1>0</TipoCalculo1> 
      <TipoCalculo2>0</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios11" msdata:rowOrder="10"> 
      <idPRV_Servicios>11</idPRV_Servicios> 
      <Servicios>Cena Show</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>0</TipoCalculo1> 
      <TipoCalculo2>0</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios12" msdata:rowOrder="11"> 
      <idPRV_Servicios>12</idPRV_Servicios> 
      <Servicios>Paquetes</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>2</idEMP_Monedas> 
      <TipoCalculo1>0</TipoCalculo1> 
      <TipoCalculo2>0</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios13" msdata:rowOrder="12"> 
      <idPRV_Servicios>13</idPRV_Servicios> 
      <Servicios>Asistencia</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios14" msdata:rowOrder="13"> 
      <idPRV_Servicios>14</idPRV_Servicios> 
      <Servicios>Guia</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>1</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>1</idEMP_Monedas> 
      <TipoCalculo1>1</TipoCalculo1> 
      <TipoCalculo2>1</TipoCalculo2> 
     </PRV_Servicios> 
     <PRV_Servicios diffgr:id="PRV_Servicios15" msdata:rowOrder="14"> 
      <idPRV_Servicios>15</idPRV_Servicios> 
      <Servicios>Extras</Servicios> 
      <Filler/> 
      <MarkupAvizo>0</MarkupAvizo> 
      <MarkUpRest>0</MarkUpRest> 
      <MarkUp>0</MarkUp> 
      <IVA>0</IVA> 
      <idPRV_ServiciosIVA>0</idPRV_ServiciosIVA> 
      <idEMP_Monedas>2</idEMP_Monedas> 
      <TipoCalculo1>0</TipoCalculo1> 
      <TipoCalculo2>0</TipoCalculo2> 
     </PRV_Servicios> 
    </DocumentElement> 
</diffgr:diffgram> 
+0

你嘗試過什麼?向我們展示一些代碼。 – alkis 2014-09-10 21:04:34

+0

這是將XS:SHEMA返回給我的代碼。非常感謝你 '<?php $ wsdl =「http://192.168.0.1/Service.asmx?WSDL」; // Credenciales $ credenciales = array(); // parametros de la llamada $ credenciales [「Usuario」] =「user」; $ credenciales [「Password」] =「12345」; // Fin de Credenciales $ respuesta = new SoapClient($ wsdl); $ consulta = $ respuesta-> Consulta_Servicios($ credenciales); echo「 RESPUESTA DE LACONSULTA
」; echo「

"; print_r($consulta); echo "
」; ?>' – 2014-09-11 16:02:43

+0

這不是我問的。我問你是否寫過任何試圖讀取xml的代碼。你不能只是要求解決方案。你必須表現出一些努力。 – alkis 2014-09-11 16:53:15

回答

4

試試這個

<?php 
$wsdl = "http://192.168.0.120/Service.asmx?WSDL"; 

//Credenciales 
$credenciales = array(); //parametros de la llamada 
$credenciales["Usuario"] = "username"; 
$credenciales["Password"] = "pass"; 
//Fin de Credenciales 

$respuesta = new SoapClient($wsdl); 
$consulta = $respuesta->Consulta_Servicios($credenciales); 

$pattern = '/<xs:schema.*<\/xs:schema>/'; 
$xml = preg_replace($pattern, '', $consulta->Consulta_ServiciosResult->any); 

$response = simplexml_load_string($xml); 

foreach ($response->DocumentElement->PRV_Servicios as $servicio) { 
    echo '----------------------------<br>'; 
    echo 'idPRV_Servicios = ' . $servicio->idPRV_Servicios . '<br>'; 
    echo 'Servicios = ' . $servicio->Servicios . '<br>'; 
    echo 'Filler = ' . $servicio->Filler . '<br>'; 
    echo 'MarkupAvizo = ' . $servicio->MarkupAvizo . '<br>'; 
    echo 'MarkUpRest = ' . $servicio->MarkUpRest . '<br>'; 
    echo 'MarkUp = ' . $servicio->MarkUp . '<br>'; 
    echo 'IVA = ' . $servicio->IVA . '<br>'; 
    echo 'idPRV_ServiciosIVA = ' . $servicio->idPRV_ServiciosIVA . '<br>'; 
    echo 'idEMP_Monedas = ' . $servicio->idEMP_Monedas . '<br>'; 
    echo 'TipoCalculo1 = ' . $servicio->TipoCalculo1 . '<br>'; 
    echo 'TipoCalculo2 = ' . $servicio->TipoCalculo2 . '<br>'; 
} 
?> 
+0

感謝alkin在5到6個小時的鍛鍊後,我得到了你的答案,並在5分鐘內解決了我的問題。也感謝juan Fede在這裏提出這個問題。 – Mahi 2017-12-09 10:24:50