Как бороться со структурой данных DataSet в php? - PullRequest
2 голосов
/ 22 марта 2011

Я пытаюсь позвонить в мыльный веб-сервис с php.

Веб-служба возвращает структуру ADO.NET DataSet.Есть ли в PHP какие-либо библиотеки, которые могут работать с такими структурами данных?Если так, как они называются и где я могу их найти?Если нет, не стесняйтесь давать советы?

Пока у меня есть это (с помощью ActiveMQ и библиотеки NuSoap):

/**
 * Create a new service instance
 * Provide ActiveMQ uri and the extended class name
 **/
$client = new Client('tcp://localhost:61613?tcpNoDelay=false', 'test');

/**
 * New service reference
 **/
$service = new ServiceProxy($client, 'ServiceName');

/* Service call */
$result = $service->get_clients();

get_clients () - это метод, который выполняет реальный сервисвызов, и он получает структуру DataSet в ответ.Как я могу манипулировать этим возвращаемым значением?

Например, в .NET существует класс DataSet.ADO.NET DataSet содержит одну или несколько таблиц ADO.NET DataTable, которые, в свою очередь, состоят из одного или нескольких ADO.NET DataColumns и DataRows, которые возвращаются в коллекцию (массив).

Простой пример кода,где DataSet содержит только один DataTable, может быть:

/**
 * Here, the val variable will contain the data positioned in the 
 * first field of the first DataRow of the first DataTable 
 **/
string val = dataset.Table[0].Rows[0].ItemArray[0];

Я хочу сделать то же самое в PHP, но мне нужна рука помощи.

1 Ответ

1 голос
/ 29 сентября 2011

Я бы посоветовал вам больше узнать о структуре данных, с которыми вы работаете. Скорее всего, это какая-то форма JSON или XML, которой можно манипулировать с помощью большого набора библиотек PHP xml и json.

Ваш первый шаг - посмотреть на данные, возвращаемые по вашему запросу, и определить их формат. Microsoft подробно документирует наборы данных API ADO.NET ЗДЕСЬ в библиотеке MSDN. Это должно помочь вам понять, что вы видите, когда вы проверяете данные. Некоторые поставщики данных позволяют получать доступ к одним и тем же данным в разных форматах, в зависимости от параметра или семейства похожих функций. Есть ли у вас документация для вашего провайдера API?

Далее, после того как вы определили формат и расшифровали специфику схемы наборов данных, вам нужен класс для манипулирования данными. Если вы имеете дело с чем-то, что соответствует опубликованному стандарту, вы можете использовать что-то вроде simpleXML, JSON или DOMXPath. Этот класс должен хранить данные в защищенных переменных-членах и предоставлять методы для проверки, итерации, загрузки, обновления, поиска и так далее. Вы должны обратиться к справочнику по функциям руководства PHP для получения справки здесь и написать все функции, которые вам нужны. Я написал бы это обобщенно, чтобы обработать любой подобный набор данных и получить класс, чтобы предоставить именно те данные, которые мне нужны для конкретного приложения.

Другой подход заключается в написании COM-компонента на языке .net для доступа к данным и манипулирования ими, а также импорта их функций через расширение COM в PHP. Я думаю, что я бы выбрал этот вариант, если бы формат данных был странным проприетарным Microsofty.

Третий возможный подход работает, только если у вас есть программный доступ к серверу. Если вы можете адаптировать поставщика услуг для соответствия спецификации, Microsoft выпустила инструментарий взаимодействия, который должен выступать в качестве моста между сервисами .net и клиентами PHP, используя слой прокси-объектов для предоставления данных ado.net сценариям PHP. , Они часто используют слово RESTful, но я не совсем уверен, что они имеют в виду. Посмотрите OData SDK для PHP ЗДЕСЬ в штаб-квартире по совместимости Microsoft (здесь также есть информация о PHP и других платформах Microsoft и таких продуктах, как Azure, silverlight, Bing и т. Д.). Как я уже сказал, я думаю, что вам потребуется поставщик данных для передачи данных, которые соответствуют их стандарту. Возможно это уже делает. Я не могу сказать без схемы! Если так, то это ваш лучший выбор. Удачи!

...