генерировать PHP классы из XSD? - PullRequest
22 голосов
/ 15 февраля 2010

Есть ли в мире аналоги JavaBeans или JAXB для PHP? Можно ли генерировать PHP-классы из XML-схемы?

Распространена практика публиковать API в виде схем XSD. Java и C # ребята могут воспользоваться этим, генерируя классы прямо из XSD. Есть ли такой же инструмент для PHP?

Ответы [ 8 ]

8 голосов
/ 21 июля 2010

Сейчас я работаю над этой проблемой и собираюсь выпустить инструмент, как только он достигнет более-менее стабильного состояния. Проверьте здесь http://mikebevz.com/xsd-to-php-tool/

Upd. Я только что выпустил первый работающий прототип, он отлично работает со схемами UBL 2.0 и одной простой схемой, но более серьезное тестирование готовится. Буду признателен за отправку схем, с которыми вы работаете, поэтому я включил бы их в набор тестов.

Upd. 2. XSD2PHP достиг версии 0.0.5. Проверьте прогресс на https://github.com/moyarada/XSD-to-PHP

4 голосов
/ 23 февраля 2010

Основными причинами использования генераторов классов XSD является

  1. Получить проверку времени компиляции
  2. Более простой синтаксис, чем простой старый XML API
  3. Автозаполнение в вашей IDE.

Теперь сопоставьте это с PHP. PHP не имеет проверку времени компиляции и имеет поддержку динамических методов / свойств. Это аннулирует две основные причины, приведенные выше, и делает это без проблем, если вам действительно не нужно автоматическое завершение. Другими словами, есть причина использовать генератор классов XSD в PHP, и, вероятно, именно поэтому ни один из них не существует.

Я предлагаю использовать PHP Simple XML , который создает свойства для динамического соответствия XML во время выполнения. Если вы проверяете свой XML по файлу XSD, а затем создаете объект Simple XML, у вас есть структура вашего объекта XML, полная методов и свойств, без необходимости генерировать код. Совершенно хороший подход в PHP.

Обратите внимание, что я не утверждаю, что SimpleXML - это то же самое, что сгенерированные классы XSD, конечно, нет. . Но это довольно близко, использование и API-мудрый. Вы все равно делаете что-то вроде $company->employee[2]->firstname в любом случае.

1 голос
/ 12 декабря 2011

Существует еще один недавний инструмент под названием PiBX a JiBX .

С сайта:

PiBX - это структура привязки XML-данных для PHP.

С PiBX вы можете генерировать классы PHP на основе доступных XML-схема. Эти классы могут быть использованы для сбора информации для XML без хлопот с проверками схемы, ограничениями или ограничениями.

1 голос
/ 27 октября 2011

XSD-схемы обычно пишутся в файлах WSDL на веб-службах SOAP.

wsdl2php - это инструмент для анализа схем WSDL (XSD) в классах php. Он использует собственный PHP SoapClient в качестве клиента.

Ознакомьтесь с этим постом для быстрого обучения и использования wsdl2php:

http://itworkarounds.blogspot.com/2011/10/simple-soap-client-with-wsdl2php-using.html

0 голосов
/ 15 июня 2018

Это, кажется, делает достойную работу https://github.com/goetas-webservices/xsd2php

Хотелось бы, чтобы он обрабатывал проверку перечисления, но в моем случае использования вроде бы нормально Я нашел полезные файлы META .yml, которые он генерирует.

0 голосов
/ 20 февраля 2010

DMS Software Reengineering Toolkit - это настраиваемый механизм генерации кода, который можно использовать для обработки произвольных формальных документов в качестве входных данных. DMS может быть использован для генерации код на произвольных языках вывода.

Мы использовали его для генерации собственных программ чтения и записи XML на Java и COBOL из DTD, которые являются старшими родственниками схем. Те же идеи легко применимы и к PHP.

0 голосов
/ 18 февраля 2010

Я изучал это некоторое время назад, и я, конечно, не мог найти один. Если ваша схема проста, есть парень, который взломал простую версию вместе для плоских схем.

Это все, что я знаю. Обычно эти ребята хорошо поддерживают языки, отличные от основных, но они также не поддерживают PHP.

0 голосов
/ 16 февраля 2010

XML - неудобный синтаксис для работы. Есть генераторы кода, которые используют XML в качестве входных данных, но если XML не является вашим единственным выбором, не идите по этому пути. Я предполагаю, что вы хотите создать свой код во время разработки, а затем загрузить его на сервер.

Тогда вам, вероятно, потребуется использовать несколько языков (PHP + JavaScript / AJAX + HTML). Поэтому было бы лучше использовать генератор многоцелевого кода, особенно если генератор может нацеливать несколько ресурсов из одного определения (например, из определения таблицы базы данных, создавать код SQL, HTML-страницы для операций CRUD и любую поддержку JS). код).

В настоящее время я работаю над генератором кода, который выполняет многоцелевой таргетинг. Продукт пока недоступен, но вы можете проверить методологию, стоящую за ним, по адресу http://www.abse.info.

...