我有自己的soap-client类实现,我的createRecord
方法是:
public function createRecord($username, $password, $doctypeName, $parentDoctypeName, $sXmlAttributes, $attachment, $fileName)
{
return $this->__soapCall('createRecord', array($username, $password, $doctypeName, $parentDoctypeName, $sXmlAttributes, $attachment, $fileName));
}
$sXmlAttributes
包含封装在CDATA中的XML,HTML实体编码已自动应用于此参数,我想避免HTML实体编码,因为此参数包含XML,有人可以帮助我发送此请求,而无需将HTML实体编码应用于sXmlAttributes
其值即为已经存在的参数封装在CDATA中。
如果要传递xml文档节点作为函数参数,则需要创建一个SoapVar对象,该对象具有xml节点的文本表示形式和XSD_ANYXML编码常数。但是,此常量不由扩展导出,并且由于某些未知原因而没有记录。
因此,要使其正常工作,您必须将XSD_ANYXML #define注册为PHP常量,或者在创建SoapVar时使用常量的整数值147。
$soapvar = new SoapVar($xml_text, 147);
$params = array("ItemXml" => $soapvar, "PropertyView" => "blah");
$result = $this->soapclient->__soapCall("SaveItem", array("parameters"=>$params), null, $this->soapheaders);
但是,这仍然不能给出正确的结果。出于某种原因,ItemXml参数节点未包装在soap请求中的关联xml参数周围,并且产生了以下肥皂(假定将'blah'用作$ xml_text):
<SOAP-ENV:Envelope xmlns:SOAP-ENV="..." xmlns:ns1="...">
<SOAP-ENV:Header>...</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:SaveItem>
<item>blah</item>
<ns1:PropertyView>blah</ns1:PropertyView>
</ns1:SaveItem>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
另外一个示例,如果函数(称为myFunc)期望使用名为xmlInput的参数,则应执行以下操作:
$soapvar = new SoapVar($query, XSD_STRING);
$result = $client->myFunc(array('xmlInput'=>$soapvar));
在此示例中,当定义变量soapVar时,我分配了XSD_STRING类型,而不是XSD_ANYXML类型。当调用该函数时,必须在关联数组中传递soapVar。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句