【发布时间】:2019-10-24 09:57:33
【问题描述】:
我正在使用 PHP 的 SoapClient 使用 WSDL SOAP 服务。以下是 WSDL 的相关位:https://gist.github.com/jurchiks/03771c0b85683969bc48711e56693919
生成的 XML 包含以下命名空间定义:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="WebApplicationImport"
....>
并且来自这个ns1命名空间的元素都以ns1:elementName为前缀。
服务提供者说这是错误的,他们想要这些不带前缀的元素,即使 WSDL 定义了一个要求:xmlns:tns="WebApplicationImport" elementFormDefault="qualified"。
一种解决方案是在发送 XML 之前执行以下操作:$xml = str_replace(':ns1', '', $xml);。这可行,但显然是一种 hack,而且我不喜欢 hack。
有没有办法告诉SoapClient 将特定命名空间作为默认值/不作为前缀处理?我想要实现的是<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="WebApplicationImport">,然后再生成信封的其余部分,理论上,这将确保该命名空间中的所有元素也没有前缀。
这对我来说似乎是正确有效的解决方案。
【问题讨论】: