包装文档/文字数组的示例

Reu*_*ben 8 php xml arrays soap

我在查找包装文档/文字样式中的简单数组的实例时遇到了麻烦.

考虑一个PHP函数,它生成一个最大计数的数组.

/**
 * @param int $max
 * @return string[] $count
 */
public function countTo($max)
{
    $array = array();
    for ($i = 0; $i < $max; $i++) {
        $array[] = 'Number: ' . ($i + 1);
    }
    return $array;
}
Run Code Online (Sandbox Code Playgroud)

为此生成的WSDL类型是:

<xsd:complexType name="countTo">
  <xsd:sequence>
    <xsd:element name="max" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<xsd:element name="countTo" nillable="true" type="ns:countTo"/>
<xsd:complexType name="ArrayOfCount">
  <xsd:sequence>
    <xsd:element minOccurs="0" maxOccurs="unbounded" name="count" nillable="true" type="xsd:string"/>
  </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="countToResponse">
  <xsd:sequence>
    <xsd:element name="count" type="ns:ArrayOfCount"/>
  </xsd:sequence>
</xsd:complexType>
<xsd:element name="countToResponse" nillable="true" type="ns:countToResponse"/>
Run Code Online (Sandbox Code Playgroud)

正文中的请求看起来像:

<ns1:countTo>
  <max>5</max>
</ns1:countTo>
Run Code Online (Sandbox Code Playgroud)

但是响应是什么样的,什么是惯例?

目前,SoapServer正在生成

<ns1:countToResponse>
  <count>
    <count>Number: 1</count>
    <count>Number: 2</count>
    <count>Number: 3</count>
    <count>Number: 4</count>
    <count>Number: 5</count>
  </count>
</ns1:countToResponse>
Run Code Online (Sandbox Code Playgroud)

我不确定嵌套count元素.也许这应该是item(并且需要更新WSDL才能实现).

<ns1:countToResponse>
  <count>
    <item>Number: 1</item>
    <item>Number: 2</item>
    <item>Number: 3</item>
    <item>Number: 4</item>
    <item>Number: 5</item>
  </count>
</ns1:countToResponse>
Run Code Online (Sandbox Code Playgroud)

Kev*_*sse 3

这确实没有任何约定。item当您有一个数组来命名集合时,有时会很方便items。但由于您的元素被命名count有点困难,因为这counts不会是一个可接受的答案。您可以选择result,但只有当它也是唯一的容器元素时才适合,如您的示例所示。

<xsd:complexType name="countToResponse">
  <xsd:sequence>
    <xsd:element name="result" type="ns:ArrayOfCount"/>
  </xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)