Php 通过soapclient向需要CDATA的服务发送SOAP请求时出现问题

Php 通过soapclient向需要CDATA的服务发送SOAP请求时出现问题,php,soap-client,cdata,Php,Soap Client,Cdata,我试图向一个服务发出SOAP请求,该服务期望CDATA作为请求的一部分。我通过以下两种方法中的任何一种,成功地利用失眠进行了通话: 文本1 文本2 文本3 ]]> 或 TAG2 TAG3TEXT1/TAG3 TAG4TEXT2/TAG4 TAG5TEXT3/TAG5 /TAG2 但是,我一直很难将上述内容翻译成php soapclient。例如,使用以下命令: $soapclient=newsoapclient('url?wsdl',数组('trace'=>1)); $xmlWriter

我试图向一个服务发出SOAP请求,该服务期望CDATA作为请求的一部分。我通过以下两种方法中的任何一种,成功地利用失眠进行了通话:


文本1
文本2
文本3
]]>


TAG2
TAG3TEXT1/TAG3
TAG4TEXT2/TAG4
TAG5TEXT3/TAG5
/TAG2
但是,我一直很难将上述内容翻译成php soapclient。例如,使用以下命令:

$soapclient=newsoapclient('url?wsdl',数组('trace'=>1));
$xmlWriter=new\xmlWriter();
$xmlWriter->openMemory();
$xmlWriter->startElement('TAG1');
$xmlWriter->startElement('TAG2');
$xmlWriter->writeElement('TAG3','TEXT1');
$xmlWriter->writeElement('TAG4','TEXT2');
$xmlWriter->writeElement('TAG5','TEXT3');
$xmlWriter->endElement();
$xmlWriter->endElement();
$myXml=$xmlWriter->outputMemory(true);
$params=数组(
new\SoapParam(new\SoapVar($myXml,XSD_ANYXML),'param')
);
$response=$soapclient->uu soapCall('ExecuteRequest',$params);
$lastrequest=$soapclient->\uu getLastRequest();
$soapclient->\uu getLastRequest()提供的输出显然不是我想要的,没有CDATA:


文本1
文本2
文本3
如果在xmlwriter中,我使用此选项手动写入CDATA:


$xmlWriter->writeCdata($xmlWriter)
文本1
文本2
文本3
');
然后出于某种奇怪的原因,$soapclient->\uu getLastRequest()返回注释掉的CDATA部分,我不明白为什么会发生这种情况:


文本1
文本2
文本3
""]]>"
请注意TAG2的结束标记是如何丢失的

编辑

如果我不使用xml编写器,CDATA被注释掉的问题也会发生

$wholeTag=new\SoapVar(“,XSD\u ANYXML);
$params=[
“param”=>$wholeTag,
];

有什么想法吗?我很可能是用了错误的方法,所以我愿意接受任何建议。

在这个问题上浪费了几个小时后,我最终放弃了使用soapclient,并用Guzzle解决了它

使用GuzzleHttp\Client;
使用GuzzleHttp\Exception\GuzzleException;
$xml=new\simplexmlement(“”;
$action=“操作url(使用Webservice的SOAP1.1示例作为参考)”;
试一试{
$response=$client->post($url,
['headers'=>
['SOAPAction'=>$action,
'内容类型'=>'文本/xml;字符集=utf-8',

'主机'=>“CDATA中有一些保留字符是不能使用的,除非它被注释掉,比如
是的,数据是真实的,只是将名称更改为更通用的。如果<是非法的,那么为什么它只注释掉第一行,但你可能是对的,这种方法可能会发生一些事情。我同意只注释掉第一行没有意义。可能是那种方法,但我不确定,这就是为什么我使用评论,而不是答案。编辑OP以添加另一个发生相同问题的场景。