Эквивалент PHP JAXB - PullRequest
       4

Эквивалент PHP JAXB

9 голосов
/ 28 марта 2010

Есть ли PHP эквивалент JAXB? Это оказалось очень полезным для разработки на Java, и как новый PHP'ер я бы хотел использовать те же концепции, которые предоставляет JAXB в мире PHP.

Ответы [ 5 ]

8 голосов
/ 11 июня 2011

Я тоже пытался найти то же самое раньше, но не смог. Поэтому я решил написать свою собственную библиотеку для PHP 5.3, которая отражает аннотации JAXB для привязки объектов к XML.

Проверьте это здесь: https://github.com/lampjunkie/xml-hitch

Надеюсь, другие найдут это полезным.

4 голосов
/ 06 октября 2013

Я написал простую и основанную на аннотациях 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');
2 голосов
/ 06 февраля 2012

Я искал что-то похожее на JAXB, но для PHP,

PiXB похоже на JAXB, на самом деле я не пробовал, но смотреть на примеры выглядит многообещающе

1 голос
/ 25 ноября 2010
0 голосов
/ 10 февраля 2018

Для этого есть пакет composer: saber / xml. Вы можете установить его с помощью composer require saber / xml. Есть домашняя страница для учебников и примеров Смотри http://sabre.io/xml/

Это простой в использовании и многофункциональный и активно поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...