gpt4 book ai didi

php - SOAP 中的 SoapVar/Param 和嵌套、重复元素

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

我的目标是能够创建一个可以包含如下项目的 soap 请求:

<flexFields>
<names>
<names>IAG Group</names>
<names>Ticket #</names>
</names>
</flexFields>

但是,我能想到的 soapvar 和 soapparam 的每一种组合都使我无法复制嵌套的“名称”标签。我可以像这样获得 1 个子标签:

$flexFields = array(
'names'=> new SoapVar(
new SoapVar(array('names'=>'IAG Group'),SOAP_ENC_OBJECT),
SOAP_ENC_OBJECT)
);

这会产生:

<flexFields xsi:type="ns2:SoapNamedValues">
<names xsi:type="names">
<names xsi:type="xsd:string">IAG Group</names>
</names>
</flexFields>

但是,如果我使用 SOAP_ENC_OBJECT,我为使名称标签重复而进行的任何尝试都会生成可怕的 BOGUS 元素,或者如果我使用 SOAP_ENC_ARRAY,则将每个项目包装在另一个“项目”元素中,这也是不可取的。

我知道我可以手动创建我想要的内容并使用 XSD_ANYXML 加载它,但这接近于违背使用 SOAP 库的目的。

任何人都可以提供一个示例来说明如何完美平衡 soapvar/soapparam + 数组嵌套以使其实际工作吗?或者我是在用 PHP 的 SOAP 库尝试不可能的事情?

最佳答案

我有类似的问题,试试这个:

$Names=array();
$Names[]=new SoapVar("IAG Group",XSD_STRING,null,null,'names');
$Names[]=new SoapVar("Ticket #",XSD_STRING,null,null,'names');
$BigNames=new SoapVar($Names,SOAP_ENC_OBJECT,null,null,'Names');

这将创建 SoapVar 对象的数组($Names)并将它们放置在 BigNames 对象中,创建如下输出:

<Names>
<names>IAG Group</names>
<names>Ticket #</names>
</Names>

然后您可以为 FlexFields 创建另一个 SoapVar 对象,但是由于某些原因您不能将一个 SoapVar 对象直接放入另一个对象中,它必须存储在一个数组中...

我想这样做:

$FlexFields=new SoapVar($BigNames,SOAP_ENC_OBJECT,null,null,'FlexFields');

这个有效:

$FF=array($BigNames);
$FlexFields=new SoapVar($FF,SOAP_ENC_OBJECT,null,null,'FlexFields');

关于php - SOAP 中的 SoapVar/Param 和嵌套、重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855677/

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