php – 解析SOAP响应

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 解析SOAP响应脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
从我的控制器@L_777_0@Web服务:
$client = new \SOApClient("http://.../webservice/NamE_OF_PAGE.asmx?WSDL");
$result = $client->EstadoHabITacionesFechas();

我明白了:

<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="TablaEstadoHabitacion" msdata:UsecurrentLocale="true">
        <xs:complexTyPE>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="TablaEstadoHabitacion">
                    <xs:complexType><xs:sequence>
                        <xs:element name="IdHabitacion" type="xs:int" minOccurs="0"/>
                        <xs:element name="FechaEnTrada" type="xs:string" minOccurs="0"/>
                        <xs:element name="FechaSalida" 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">
    <DocumentElement xmlns="">
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
            <IdHabitacion>1</IdHabitacion>
            <FechaEnTrada>23/05/2012</FechaEnTrada>
            <FechaSalida>31/12/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
            <IdHabitacion>2</IdHabitacion>
            <FechaEnTrada>23/05/2012</FechaEnTrada>
            <FechaSalida>29/06/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion3" msdata:rowOrder="2" diffgr:hasChanges="inserted">
            <IdHabitacion>2</IdHabitacion>
            <FechaEnTrada>29/06/2012</FechaEnTrada>
            <FechaSalida>01/07/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion4" msdata:rowOrder="3" diffgr:hasChanges="inserted">
            <IdHabitacion>3</IdHabitacion>
            <FechaEnTrada>02/06/2012</FechaEnTrada>
            <FechaSalida>03/06/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion5" msdata:rowOrder="4" diffgr:hasChanges="inserted">
            <IdHabitacion>3</IdHabitacion>
            <FechaEnTrada>29/06/2012</FechaEnTrada>
            <FechaSalida>01/07/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion6" msdata:rowOrder="5" diffgr:hasChanges="inserted">
            <IdHabitacion>4</IdHabitacion>
            <FechaEnTrada>29/06/2012</FechaEnTrada>
            <FechaSalida>01/07/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion7" msdata:rowOrder="6" diffgr:hasChanges="inserted">
            <IdHabitacion>5</IdHabitacion>
            <FechaEnTrada>02/06/2012</FechaEnTrada>
            <FechaSalida>03/06/2012</FechaSalida>
        </TablaEstadoHabitacion>
        <TablaEstadoHabitacion diffgr:id="TablaEstadoHabitacion20" msdata:rowOrder="19" diffgr:hasChanges="inserted">
            <IdHabitacion>10</IdHabitacion>
            <FechaEnTrada>02/06/2012</FechaEnTrada>
            <FechaSalida>03/06/2012</FechaSalida>
        </TablaEstadoHabitacion>
    </DocumentElement>
</diffgr:diffgram>

我该如何解析这些数据并使用它?

你不清楚“使用”是什么,但你显然需要某种形式的xml解析/搜索.

例如,尝试xml-loading该字符串和var_dump结果.简单地列举各种属性应该向您展示机会.

稍后,您可以尝试XPath search和更高级的“技巧”来加快工作.

// Remove namespaces
    $xml    = str_replace(array("diffgr:","msdata:"),'',$xml);
    // Wrap into root element to make it standard XML
    $xml    = "<package>".$xml."</package>";
    // Parse with SimpleXML - PRobably there're much better ways
    $data   = simplexml_load_string($xml);
    $rooms  = $data->package->diffgram->DocumentElement->TablaEstadoHabitacion;
    print "We have " . count($rooms) . " rooms: \n";
    foreach($rooms as $i => $room)
    {
            print "Room {$i}: id={$room['id']} (official id: {$room->IdHabitacion}\n";
            print "EnTrada {$room->FechaEnTrada},salida {$room->FechaSalida}\n...\n";
    }

你可以使用几个解析器,这是一个快速而肮脏的解析器.

查看更多here.

大数据

注意:对于非常大的XML数据集,I’ve found out that foreach is best.

对于只需要一些信息的大型数据集,并且整个文件可能不适合可用内存,您可能希望使用XMLParser或XMLReader,并在保持/操作的同时通过解析器筛选整个文件(例如发送在数据库中,或显示为HTML)只有您需要的信息.

虽然这不是一般的好习惯,但您可以在进入长XML解析循环之前关闭输出缓冲,一旦输出输出HTML并偶尔刷新().这会将HTML外包给HTTP服务器,在PHP过程中占用更少的内存,代价是稍微低于压缩(如果你输出超过40K的HTML块,差异可以忽略不计)和按比例更好的响应度(用户“看到”某些事情发生得更快,即使整体操作完成需要更长时间.体验是更快的负载).

脚本宝典总结

以上是脚本宝典为你收集整理的php – 解析SOAP响应全部内容,希望文章能够帮你解决php – 解析SOAP响应所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。