标签:soap-client xml php soap
我在php中使用soap调用了Web服务,但是我从服务器收到xml中的错误作为响应.
问题是,在为请求创建xml时,Php在xml中引入了id,然后在找到相同节点的任何地方,它都将id作为引用传递.
例如:-
<ns1:ChargeBU id=\"ref1\">
<ns1:ChargeBreakUp>
<ns1:PriceId>0</ns1:PriceId>
<ns1:ChargeType>TboMarkup</ns1:ChargeType>
<ns1:Amount>35</ns1:Amount>
</ns1:ChargeBreakUp><ns1:ChargeBreakUp>
<ns1:PriceId>0</ns1:PriceId>
<ns1:ChargeType>OtherCharges</ns1:ChargeType>
<ns1:Amount>0.00</ns1:Amount>
</ns1:ChargeBreakUp>
</ns1:ChargeBU>
然后当找到相同的节点时
<ns1:ChargeBU href=\"#ref1\"/>
那么,如何防止这种情况,使它再次包含整个节点,而不仅仅是传递引用?
解决方法:
您可以创建该数组的新副本(实例),以防止php对相同的值使用引用.
例如,我们有:
$item = array(
"id" => 1,
"name" => "test value"
);
以及我们的要求/回应:
$response = array(
"item1" => $item,
"item2" => $item
);
默认情况下,php将使用对item1的引用替换item2的值(两个项目均指向同一数组)
为了防止这种行为,我们需要创建两个具有相同结构的不同项目,例如:
function copyArray($source){
$result = array();
foreach($source as $key => $item){
$result[$key] = (is_array($item) ? copyArray($item) : $item);
}
return $result;
}
以及请求/响应:
$response = array(
"item1" => copyArray($item),
"item2" => copyArray($item)
);
相同的结构项实际上是内存中的不同数组,在这种情况下,php将不会生成任何引用
标签:soap-client,xml,php,soap 来源: https://codeday.me/bug/20191029/1960675.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。