PHP解析来自包含xsd的Web服务的响应

时间:2014-09-10 15:15:40

标签: php arrays xml soap schema

我需要使用PHP SoapClient解析一些xml。 响应似乎也包含xsd。 以下是我得到的回复示例。 我欢迎你的意见和贡献。非常感谢你。

<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>

1 个答案:

答案 0 :(得分:5)

试试这个

<?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>';
}
?>
相关问题