php soap 没有数据,php SoapVar没有设置属性

是的,你不是唯一一个遇到这个问题的人 – 我看到过无数的帖子,人们声称使用SOAP_ENC_OBJECT传递给SoapVar的数组解决了这个问题,而其他人则在同一帖子上声称没有.并且文档不清楚的原因(除了我的帖子年前在php.net的评论部分).

面对同样的问题,我已经阅读了PHP SOAP扩展的来源.基本上你使用的语法绝对正确:

$param = array(

"_" => 'value',

'attrName' => 'attributeName'

);

$p = new SoapVar($param, SOAP_ENC_OBJECT);

文档没有说明:这种语法可能会产生两种不同的结果(实际上甚至更多:PHP SOAP可能以八种不同的方式表达它).正如您可能看到上面的代码含糊不清:上面的代码中说’attrName’是属性而不是元素?没有.上面的代码没有足够的信息供SoapClient决定’attrName’是什么,所以它默认为“一个元素”.

SoapClient可以以两种模式运行:非WSDL和WSDL.在以前的模式中,您永远不会得到您想要的结果:SoapClient依赖于类型信息以将数组元素转换为属性.由于非WSDL模式中不存在类型信息,SoapClient将提供的数组表示为元素集 – 正是您所获得的.在WSDL模式中,存在类型信息,因此SoapClient知道元素和属性名称,并且可以将它们与数组索引匹配.因此,如果您需要属性,则必须在WSDL模式下使用SoapClient.

基本上为了实现你想要的东西你需要在文档/文字模式下使用< xsd:attribute name =“attrName”type =“xsd:string”/>在< xsd:schema>的相应部分中块.

一些人声称成功使用属性的数组和其他人说“它不起作用”的原因在于它们的设置:有些人有WSDL文件要消耗,有些人只是想尝试新的SoapClient(null,array(. ..)); (这当然不符合他们的期望)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值