Есть ли эквивалент PHP для JAXB? Это очень полезно для разработки Java, и в качестве нового PHP'er я бы хотел использовать те же концепции, что и JAXB в мире PHP.
Я тоже пытался найти то же самое раньше, но не мог. Поэтому я решил написать свою собственную библиотеку для PHP 5.3, которая отражает аннотации JAXB для привязки объектов к XML.
Проверьте это здесь: https://github.com/lampjunkie/xml-hitch
Надеюсь, другие найдут это полезным.
Я написал простой и основанный на аннотации PAXB: https://github.com/ziollek/PAXB . Проверьте, достаточно ли этого решения.
Примеры классов с аннотациями привязки XML
/** * @XmlElement(name="root") */ class SampleEntity { /** * @XmlElement(name="attribute-value", type="AttributeValueEntity") */ private $nestedEntity; private $text; /** * @XmlElementWrapper(name="number-list") */ private $number = array(); public function __construct($number = array(), $nestedEntity = null, $text = "") { $this->number = $number; $this->nestedEntity = $nestedEntity; $this->text = $text; } } class AttributeValueEntity { /** * @XmlAttribute */ private $attribute; /** * @XmlElement */ private $value; /** * @param string $attribute * @param string $value */ public function __construct($attribute = "", $value = "") { $this->attribute = $attribute; $this->value = $value; } /** * @return string */ public function getAttribute() { return $this->attribute; } /** * @return string */ public function getValue() { return $this->value; } }
Пример сортировки:
$sampleEntity = new SampleEntity( array(1,2,3), new AttributeValueEntity('sample attribure', 'sample value'), 'Sample text' ); echo PAXB\Setup::getMarshaller()->marshall($sampleEntity, true);
и выход:
<?xml version="1.0"?> <root> <attribute-value attribute="sample attribure"> <value>sample value</value> </attribute-value> <text>Sample text</text> <number-list> <number>1</number> <number>2</number> <number>3</number> </number-list> </root>
Демаршаллизация
$xmlInput = '...'; //as above /** @var SampleEntity $sampleEntity */ $sampleEntity = PAXB\Setup::getUnmarshaller()->unmarshall($xmlInput, 'SampleEntity');
Я искал нечто похожее на JAXB, но для PHP,
PiXB похож на JAXB, на самом деле я его не пробовал, но просмотр примеров кажется многообещающим
Попробуйте https://github.com/moyarada/XSD-to-PHP