Is there a PHP equivalent to JAXB? I开发者_运维百科t's proved very useful for Java development, and as a new PHP'er I'd like to use the same concepts JAXB provides in a PHP world.
I was also trying to find the same thing before, but couldn't. So I decided to write my own library for PHP 5.3 which mirrors JAXB's annotations to bind objects to XML.
Check it out here: https://github.com/lampjunkie/xml-hitch
Hopefully others will find this useful.
I wrote a simple and based on the annotations PAXB: https://github.com/ziollek/PAXB. Check whether this solution is sufficient.
Sample classes with XML binding annotations
/**
* @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;
}
}
Marshalling example:
$sampleEntity = new SampleEntity(
array(1,2,3),
new AttributeValueEntity('sample attribure', 'sample value'),
'Sample text'
);
echo PAXB\Setup::getMarshaller()->marshall($sampleEntity, true);
and the output:
<?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>
Unmarshalling
$xmlInput = '...'; //as above
/** @var SampleEntity $sampleEntity */
$sampleEntity = PAXB\Setup::getUnmarshaller()->unmarshall($xmlInput, 'SampleEntity');
I was looking for something similar to JAXB but for PHP,
PiXB seems similar to JAXB, actually I didn't tried it but looking at the examples seems promising
Try https://github.com/moyarada/XSD-to-PHP
There is a composer package for it: sabre/xml. You can install it with composer require sabre/xml. There is a homepage for tutorials and examples See http://sabre.io/xml/
It is easy to use and feature rich and actively maintained.
精彩评论