gpt4 book ai didi

php - 解析 SOAP 响应

转载 作者:可可西里 更新时间:2023-11-01 12:47:05 26 4
gpt4 key购买 nike

从我的 Controller 调用网络服务:

$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 加载该字符串和 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 block ,差异可以忽略不计)和相应更好的响应率(用户“看到”事情发生得更快,即使整个操作完成需要更长的时间。体验是更快加载)。

关于php - 解析 SOAP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com