Я думаю, что у меня есть ответ, по крайней мере, что-то, что работает сейчас.
Все функции веб-службы .Net возвращают один DataSet, содержащий несколько таблиц.Nusoap возвращает это непротиворечивым способом:
array(
'ResultSetName => array(
'schema' => array(...),
'diffgram' => array(
'DataSetName' => array(
'Table1NameWithOneRow' => array(
'Column1' => 'Value1',
'Column2' => 'Value2',
...
),
'Table2NameWithManyRows' => array(
0 => array(
'Column1' => 'Value1',
'Column2' => 'Value2',
...
),
1 => array(
'Column1' => 'Value1',
'Column2' => 'Value2',
...
),
...
),
...
)
)
)
Это достаточно просто для анализа: отбросьте ResultSetName, чтобы покинуть схему и диаграмму.Выбросьте схему, чтобы оставить только diffgram.Возьмите только первый элемент diffgram (отбросьте все что угодно, кроме первого DataSet).Выбросьте DataSetName.Это оставляет меня с массивом таблиц.
Теперь, если в таблице возвращается только одна строка, данные на один уровень выше, то есть не отображаются в массиве элемента 0, как первая строка в две таблицы строк, так что это необходимо учитывать.В противном случае я просто просматриваю данные таблицы и выбрасываю любые элементы с ключом, начинающимся с «!», Так как это некие метаданные.
Затем я оставляю необработанные данные во вложенных массивах, чтото, что я передаю для дальнейшей обработки в моих сценариях PHP.
Следует обратить внимание на таблицы включения с нулевыми строками, которые просто не отправляются вообще - даже не пустой массив.Даты могут быть легко распознаны и проанализированы автоматически, в противном случае все зависит от потребителя, который делает с данными то, что ему нравится.
Было бы хорошо иметь этот анализ в библиотеке "diffgram", которая понимает многобольше о структуре диграммы, чем я.Надеюсь, это кому-нибудь пригодится.