php 遍历WEBSERVICE返回的DATASET内容

ron_xin 2017-07-31 04:05:15

$result = $client->call('getVoyage', array('filterXml' => $filterXml));
print_r($result);


返回XML格式如下,希望遍历出VOYAGE的FROMPORT、TOPORT,及ROW中多个的SEATRANK、PRICE1

Array
(
[return] => <?xml version="1.0" encoding="utf-8"?><DATASET VERSION="1.0">
<VOYAGE>
<FROMPORT>蛇口港</FROMPORT>
<TOPORT>香港机场海天码头</TOPORT>
<FPORTCODE>SK</FPORTCODE>
<TPORTCODE>HKA</TPORTCODE>
<SHIP>迅隆二号</SHIP>
<SHIPCODE>XL2</SHIPCODE>
<SETOFFDATE>2017-08-01</SETOFFDATE>
<SETOFFTIME>07:45</SETOFFTIME>
<LINECODE>SK-HKA</LINECODE>
<VOYAGEROUTE_ID>67622170</VOYAGEROUTE_ID>
<TICKETNUM>121(250)120(100)119(0)</TICKETNUM>
<ISJZ>0</ISJZ>
<CLIENTID>23069</CLIENTID>
<CLIENTCODE>PXWX</CLIENTCODE>
<DTSEATRANKPRICE>
<ROW>
<VOYAGEROUTEID>67622170</VOYAGEROUTEID>
<SEATRANKID>121</SEATRANKID>
<SEATRANK>普通位</SEATRANK>
<PRICE1>260</PRICE1>
<PRICE2>170</PRICE2>
<PRICE3>NULL</PRICE3>
<PRICE4>0</PRICE4>
<DETAIL1>44277667</DETAIL1>
<DETAIL2>44277680</DETAIL2>
<DETAIL3>0</DETAIL3>
<DETAIL4>44277684</DETAIL4>
<STANDARDPRICE1>260</STANDARDPRICE1>
<STANDARDPRICE2>170</STANDARDPRICE2>
<STANDARDPRICE3>NULL</STANDARDPRICE3>
<STANDARDPRICE4>0</STANDARDPRICE4>
</ROW>
<ROW>
<VOYAGEROUTEID>67622170</VOYAGEROUTEID>
<SEATRANKID>120</SEATRANKID>
<SEATRANK>头等位</SEATRANK>
<PRICE1>290</PRICE1>
<PRICE2>200</PRICE2>
<PRICE3>NULL</PRICE3>
<PRICE4>NULL</PRICE4>
<DETAIL1>44277687</DETAIL1>
<DETAIL2>44277698</DETAIL2>
<DETAIL3>0</DETAIL3>
<DETAIL4>0</DETAIL4>
<STANDARDPRICE1>290</STANDARDPRICE1>
<STANDARDPRICE2>200</STANDARDPRICE2>
<STANDARDPRICE3>NULL</STANDARDPRICE3>
<STANDARDPRICE4>NULL</STANDARDPRICE4>
</ROW>
<ROW>
<VOYAGEROUTEID>67622170</VOYAGEROUTEID>
<SEATRANKID>119</SEATRANKID>
<SEATRANK>特等位</SEATRANK>
<PRICE1>290</PRICE1>
<PRICE2>200</PRICE2>
<PRICE3>NULL</PRICE3>
<PRICE4>NULL</PRICE4>
<DETAIL1>44277701</DETAIL1>
<DETAIL2>44277711</DETAIL2>
<DETAIL3>0</DETAIL3>
<DETAIL4>0</DETAIL4>
<STANDARDPRICE1>290</STANDARDPRICE1>
<STANDARDPRICE2>200</STANDARDPRICE2>
<STANDARDPRICE3>NULL</STANDARDPRICE3>
<STANDARDPRICE4>NULL</STANDARDPRICE4>
</ROW>
</DTSEATRANKPRICE>
</VOYAGE>
<VOYAGE>
<FROMPORT>蛇口港</FROMPORT>
<TOPORT>香港机场海天码头</TOPORT>
<FPORTCODE>SK</FPORTCODE>
<TPORTCODE>HKA</TPORTCODE>
<SHIP>迅隆一号</SHIP>
<SHIPCODE>XL1</SHIPCODE>
<SETOFFDATE>2017-08-01</SETOFFDATE>
<SETOFFTIME>08:45</SETOFFTIME>
<LINECODE>SK-HKA</LINECODE>
<VOYAGEROUTE_ID>67379103</VOYAGEROUTE_ID>
<TICKETNUM>121(202)120(88)119(14)</TICKETNUM>
<ISJZ>0</ISJZ>
<CLIENTID>23069</CLIENTID>
<CLIENTCODE>PXWX</CLIENTCODE>
<DTSEATRANKPRICE>
<ROW>
<VOYAGEROUTEID>67379103</VOYAGEROUTEID>
<SEATRANKID>121</SEATRANKID>
<SEATRANK>普通位</SEATRANK>
<PRICE1>260</PRICE1>
<PRICE2>170</PRICE2>
<PRICE3>NULL</PRICE3>
<PRICE4>0</PRICE4>
<DETAIL1>44277667</DETAIL1>
<DETAIL2>44277680</DETAIL2>
<DETAIL3>0</DETAIL3>
<DETAIL4>44277684</DETAIL4>
<STANDARDPRICE1>260</STANDARDPRICE1>
<STANDARDPRICE2>170</STANDARDPRICE2>
<STANDARDPRICE3>NULL</STANDARDPRICE3>
<STANDARDPRICE4>0</STANDARDPRICE4>
</ROW>
</DTSEATRANKPRICE>
</VOYAGE>
</DATASET>
)

...全文
176 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongmei85 2017-08-01
  • 打赏
  • 举报
回复

$x = simplexml_load_string($result['return']);
果酱很好吃 2017-08-01
  • 打赏
  • 举报
回复
simplexml_load_string 需要一个字符串的变量,你给了一个 数组变量!在 test.php 的 64 行
ron_xin 2017-08-01
  • 打赏
  • 举报
回复

<?php
header("content-type:text/html;charset=utf-8");

require_once('/lib/nusoap.php');


$client = new nusoap_client('https://202.82.66.148:8443/ptms4541/ws/CksServices?wsdl', true, '', '', '', '');

//worksite:SKJWWEB,account:SKJWWEB01, pwd:ckhy123456 , discount_id:1
//声明SOAP变量,为数组模式
$worksite ="PXWX";//"ZGWX";
$account ="PXWX01";//"ZGWX01";
$pwd =strtoupper(MD5("welcome"));
//echo $pwd."<br>";
$timestamp =date('YmdHi', time());
//echo $timestamp."<br>";
$pwd2 =$account .$pwd . $timestamp;
//echo $pwd2."<br>";
$pwd3 =strtoupper(MD5($account .$pwd . $timestamp));
//echo $pwd3."<br>";

$header = '<tns:RequestSOAPHeader xmlns:tns="https://202.82.66.148:8443/ptms4541/ws/CksServices">
		<tns:worksite xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">'.$worksite.'</tns:worksite>
		<tns:account xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">'.$account.'</tns:account>
		<tns:pwd xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">'.$pwd3.'</tns:pwd>
		<tns:discount_id xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">'.'1'.'</tns:discount_id>
		<tns:timestamp xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">'.$timestamp.'</tns:timestamp>
		</tns:RequestSOAPHeader>';
$client->setHeaders($header);

$client->decode_utf8 = 0;
$client->soap_defencoding = 'UTF-8';


$err = $client->getError();
if ($err) {
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}

$SAILDATE=date("Y-m-d",strtotime(" +1 day"));
//echo $SAILDATE."<br>";

$filterXml ='<?xml version="1.0" encoding="utf-8"?>
			<TABLE VERSION="1.0">
			<ROW>
				<SAILDATE>'.$SAILDATE.'</SAILDATE>
				<SAILDATERETURN>'.$SAILDATE.'</SAILDATERETURN>
				<FROMPORTCODE>SK</FROMPORTCODE>
				<TOPORTCODE>HKA</TOPORTCODE>
				<FROMPORTCODERETURN>HKA</FROMPORTCODERETURN>
				<TOPORTCODERETURN>SK</TOPORTCODERETURN>
				<CURRENCYCODE>RMB</CURRENCYCODE>
				<ISROUNDTRIP>0</ISROUNDTRIP>
				<LANG>C</LANG>
			</ROW>
			</TABLE>';

//var_dump($filterXml)."<br>";


$result = $client->call('getVoyage', array('filterXml' => $filterXml));
//print_r($result);

    $x = simplexml_load_string($result);
    $data = [];
    foreach($x->VOYAGE as $VOYAGE)
    {
        $tmp['VOYAGE'] = current($VOYAGE->FROMPORT);
        $tmp['FROMPORT'] = current($VOYAGE->FROMPORT);
        $tmp['TOPORT'] = current($VOYAGE->TOPORT);
        $tmp['ROW'] = [];
        foreach($VOYAGE->DTSEATRANKPRICE->ROW as $ROW){
            $tmprow = [];
            $tmprow['SEATRANK'] = current($ROW->SEATRANK);
            $tmprow['PRICE1'] = current($ROW->PRICE1);
            $tmp['ROW'][] = $tmprow;
        }
        $data[] = $tmp;
    }
    echo "<pre>";
    print_r($data);
    echo "</pre>";
?>
ron_xin 2017-08-01
  • 打赏
  • 举报
回复
D:\xampp\php\php.exe D:\xampp\htdocs\untitled1\test.php Warning: simplexml_load_string() expects parameter 1 to be string, array given in D:\xampp\htdocs\untitled1\test.php on line 64 Notice: Trying to get property of non-object in D:\xampp\htdocs\untitled1\test.php on line 66 Warning: Invalid argument supplied for foreach() in D:\xampp\htdocs\untitled1\test.php on line 66 <pre>Array ( ) </pre> Process finished with exit code 0
果酱很好吃 2017-07-31
  • 打赏
  • 举报
回复

$s = <<<'TEXT'
<?xml version="1.0" encoding="utf-8"?>
<DATASET VERSION="1.0">
  <VOYAGE>
    <FROMPORT>蛇口港</FROMPORT>
    <TOPORT>香港机场海天码头</TOPORT>
    <FPORTCODE>SK</FPORTCODE>
    <TPORTCODE>HKA</TPORTCODE>
    <SHIP>迅隆二号</SHIP>
    <SHIPCODE>XL2</SHIPCODE>
    <SETOFFDATE>2017-08-01</SETOFFDATE>
    <SETOFFTIME>07:45</SETOFFTIME>
    <LINECODE>SK-HKA</LINECODE>
    <VOYAGEROUTE_ID>67622170</VOYAGEROUTE_ID>
    <TICKETNUM>121(250)120(100)119(0)</TICKETNUM>
    <ISJZ>0</ISJZ>
    <CLIENTID>23069</CLIENTID>
    <CLIENTCODE>PXWX</CLIENTCODE>
    <DTSEATRANKPRICE>
      <ROW>
        <VOYAGEROUTEID>67622170</VOYAGEROUTEID>
        <SEATRANKID>121</SEATRANKID>
        <SEATRANK>普通位</SEATRANK>
        <PRICE1>260</PRICE1>
        <PRICE2>170</PRICE2>
        <PRICE3>NULL</PRICE3>
        <PRICE4>0</PRICE4>
        <DETAIL1>44277667</DETAIL1>
        <DETAIL2>44277680</DETAIL2>
        <DETAIL3>0</DETAIL3>
        <DETAIL4>44277684</DETAIL4>
        <STANDARDPRICE1>260</STANDARDPRICE1>
        <STANDARDPRICE2>170</STANDARDPRICE2>
        <STANDARDPRICE3>NULL</STANDARDPRICE3>
        <STANDARDPRICE4>0</STANDARDPRICE4>
      </ROW>
      <ROW>
        <VOYAGEROUTEID>67622170</VOYAGEROUTEID>
        <SEATRANKID>120</SEATRANKID>
        <SEATRANK>头等位</SEATRANK>
        <PRICE1>290</PRICE1>
        <PRICE2>200</PRICE2>
        <PRICE3>NULL</PRICE3>
        <PRICE4>NULL</PRICE4>
        <DETAIL1>44277687</DETAIL1>
        <DETAIL2>44277698</DETAIL2>
        <DETAIL3>0</DETAIL3>
        <DETAIL4>0</DETAIL4>
        <STANDARDPRICE1>290</STANDARDPRICE1>
        <STANDARDPRICE2>200</STANDARDPRICE2>
        <STANDARDPRICE3>NULL</STANDARDPRICE3>
        <STANDARDPRICE4>NULL</STANDARDPRICE4>
      </ROW>
      <ROW>
        <VOYAGEROUTEID>67622170</VOYAGEROUTEID>
        <SEATRANKID>119</SEATRANKID>
        <SEATRANK>特等位</SEATRANK>
        <PRICE1>290</PRICE1>
        <PRICE2>200</PRICE2>
        <PRICE3>NULL</PRICE3>
        <PRICE4>NULL</PRICE4>
        <DETAIL1>44277701</DETAIL1>
        <DETAIL2>44277711</DETAIL2>
        <DETAIL3>0</DETAIL3>
        <DETAIL4>0</DETAIL4>
        <STANDARDPRICE1>290</STANDARDPRICE1>
        <STANDARDPRICE2>200</STANDARDPRICE2>
        <STANDARDPRICE3>NULL</STANDARDPRICE3>
        <STANDARDPRICE4>NULL</STANDARDPRICE4>
      </ROW>
    </DTSEATRANKPRICE>
  </VOYAGE>
  <VOYAGE>
    <FROMPORT>蛇口港</FROMPORT>
    <TOPORT>香港机场海天码头</TOPORT>
    <FPORTCODE>SK</FPORTCODE>
    <TPORTCODE>HKA</TPORTCODE>
    <SHIP>迅隆一号</SHIP>
    <SHIPCODE>XL1</SHIPCODE>
    <SETOFFDATE>2017-08-01</SETOFFDATE>
    <SETOFFTIME>08:45</SETOFFTIME>
    <LINECODE>SK-HKA</LINECODE>
    <VOYAGEROUTE_ID>67379103</VOYAGEROUTE_ID>
    <TICKETNUM>121(202)120(88)119(14)</TICKETNUM>
    <ISJZ>0</ISJZ>
    <CLIENTID>23069</CLIENTID>
    <CLIENTCODE>PXWX</CLIENTCODE>
    <DTSEATRANKPRICE>
      <ROW>
        <VOYAGEROUTEID>67379103</VOYAGEROUTEID>
        <SEATRANKID>121</SEATRANKID>
        <SEATRANK>普通位</SEATRANK>
        <PRICE1>260</PRICE1>
        <PRICE2>170</PRICE2>
        <PRICE3>NULL</PRICE3>
        <PRICE4>0</PRICE4>
        <DETAIL1>44277667</DETAIL1>
        <DETAIL2>44277680</DETAIL2>
        <DETAIL3>0</DETAIL3>
        <DETAIL4>44277684</DETAIL4>
        <STANDARDPRICE1>260</STANDARDPRICE1>
        <STANDARDPRICE2>170</STANDARDPRICE2>
        <STANDARDPRICE3>NULL</STANDARDPRICE3>
        <STANDARDPRICE4>0</STANDARDPRICE4>
      </ROW>
    </DTSEATRANKPRICE>
  </VOYAGE>
</DATASET>
TEXT;

$x = simplexml_load_string($s);
$data = [];
foreach($x->VOYAGE as $VOYAGE){
	$tmp['VOYAGE'] = current($VOYAGE->FROMPORT);
	$tmp['FROMPORT'] = current($VOYAGE->FROMPORT);
	$tmp['TOPORT'] = current($VOYAGE->TOPORT);
	$tmp['ROW'] = [];
	foreach($VOYAGE->DTSEATRANKPRICE->ROW as $ROW){
		$tmprow = [];
		$tmprow['SEATRANK'] = current($ROW->SEATRANK);
		$tmprow['PRICE1'] = current($ROW->PRICE1);
		$tmp['ROW'][] = $tmprow;
	}

	$data[] = $tmp;
}
echo "<pre>";
print_r($data);
echo "</pre>";
/*
Array
(
    [0] => Array
        (
            [VOYAGE] => 蛇口港
            [FROMPORT] => 蛇口港
            [TOPORT] => 香港机场海天码头
            [ROW] => Array
                (
                    [0] => Array
                        (
                            [SEATRANK] => 普通位
                            [PRICE1] => 260
                        )

                    [1] => Array
                        (
                            [SEATRANK] => 头等位
                            [PRICE1] => 290
                        )

                    [2] => Array
                        (
                            [SEATRANK] => 特等位
                            [PRICE1] => 290
                        )

                )

        )

    [1] => Array
        (
            [VOYAGE] => 蛇口港
            [FROMPORT] => 蛇口港
            [TOPORT] => 香港机场海天码头
            [ROW] => Array
                (
                    [0] => Array
                        (
                            [SEATRANK] => 普通位
                            [PRICE1] => 260
                        )

                )

        )

)
*/

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧