2012-06-25 4 views
0

Я использую класс PHP SOAPSERVER.php soapserver возвращает более читаемый ассоциативный массив

В ответ я посылаю ассоциативный массив PHP:

function getItems()  
{  
    ... 
    $items[] = Array("itemID" =>$itemID,"itemName"=>$itemName); 
    return $items; 
} 

возвращение SOAP выглядит так:

... 
<Items> 
<item type="Map"> 
    <item> 
     <key type="string"> 
      itemID 
     </key> 
     <value type="string"> 
      17558 
     </value> 
    </item> 
    <item> 
     <key type="string"> 
      itemName 
     </key> 
     <value type="string"> 
      I-17558 
     </value> 
    </item> 
</item> 
</Items> 
... 

Такое возвращение довольно трудно анализировать для человека (с учетом большего массива). Предпочтительная форма будет выглядеть так:

... 
<Items> 
    <item> 
     <itemID>17558</itemID> 
     <itemName>I-17558</itemName> 
    </item> 
    <item> 
     <itemID>17559</itemID> 
     <itemName>I-17559</itemName> 
    </item> 
</Items> 
    ... 

ли такое SOAP вернуть возможно (не изменяя тип возвращаемого значения - массив)? Как?

Я только что начал с SOAP, и большинство учебных пособий показывают, как возвращать простые типы, такие как строка.

+0

Почему вы хотите прочитать сообщения SOAP вообще? Обычно клиент преобразует его в любые родные структуры/типы, соответствующие данным ответа. – ThiefMaster

+0

@ThiefMaster, я хочу разобрать SOAP-сообщение как XML, используя методы DOM. Это выглядит довольно беспорядочно с текущей структурой сообщений ответа. – user1463822

+0

Ugh, используйте существующий клиент SOAP ... так или иначе, вот как выглядит SOAP. Вы не можете просто использовать другой формат. Это стандартизировано. – ThiefMaster

ответ

5

Вместо отправки ассоциативного массива отправьте объект stdclass.

Пример:

$return = new stdclass; 
$return->ItemID = 1; 
$return->ItemName = 'foo'; 

return $return; 

Затем результаты SOAP будет именно так, как вы хотите!

+0

Клиент SOAP использует объектную нотацию при отправке объектов, поэтому это должно отвечать на вопрос OP. Вы также можете создать экземпляр предопределенного класса, используя типичный синтаксис создания объекта, т. Е. «Новый stdClass()». –

Смежные вопросы