在 php 中处理 SOAP Web 服务响应

Processing a SOAP web service response in php

我的 .Net Web 服务已 运行 多年,现在我希望能够使用 php 调用和检索内容。服务正确returns 回复:

 <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
      <Lang_Country_Region>Chinese - China</Lang_Country_Region>
      <twoLetter>zh-CN</twoLetter>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="1">
      <Lang_Country_Region>Dutch - The Netherlands</Lang_Country_Region>
      <twoLetter>nl-NL</twoLetter>
</Table>
<Table diffgr:id="Table3" msdata:rowOrder="2">
  <Lang_Country_Region>English - United States</Lang_Country_Region>
  <twoLetter>en-US</twoLetter>
</Table>
<Table diffgr:id="Table4" msdata:rowOrder="3">
  <Lang_Country_Region>French - France</Lang_Country_Region>
  <twoLetter>fr-FR</twoLetter>
</Table>
<Table diffgr:id="Table5" msdata:rowOrder="4">
  <Lang_Country_Region>German - Germany</Lang_Country_Region>
  <twoLetter>de-DE</twoLetter>
</Table>

我用这个 php 代码得到了这个结果:

$result = $client->lstSupLang($params)->lstSupLangResult;

我卡在这里了,我正在使用 SoapClient 进行这些调用。

如何阅读响应中的肥皂 body/elements?

更新: 所以现在我通过以下方式检索了数据:

$xml = simplexml_load_string($result->any);

我只是不确定如何解析 $xml:

中存在的内容
SimpleXMLElement Object ( [NewDataSet] => SimpleXMLElement Object ( 
[Table] => Array ( 
[0] => SimpleXMLElement Object ( [Lang_Country_Region] => Chinese - China [twoLetter] => zh-CN ) 
[1] => SimpleXMLElement Object ( [Lang_Country_Region] => Dutch - The Netherlands [twoLetter] => nl-NL ) 
[2] => SimpleXMLElement Object ( [Lang_Country_Region] => English - United States [twoLetter] => en-US ) 
[3] => SimpleXMLElement Object ( [Lang_Country_Region] => French - France [twoLetter] => fr-FR ) 
[4] => SimpleXMLElement Object ( [Lang_Country_Region] => German - Germany [twoLetter] => de-DE ))))

如何使用 php 通读这篇文章?

解决了。

$count= 0;

foreach ($xml->children() as $values) {
    while($row = $values[$count]) {
        echo $row->Table[$count]->Lang_Country_Region . "<br>";
        echo $row->Table[$count]->twoLetter . "<br>";
        $count = $count + 1;
    }
}

不确定这是否正确,希望看到替代方法。但它确实在没有所有 SOAP 的情况下输出结果。