2010-03-28 11 views
9

Esiste un equivalente PHP in JAXB? Si è rivelato molto utile per lo sviluppo di Java e, come nuovo PHP, mi piacerebbe utilizzare gli stessi concetti offerti da JAXB in un mondo PHP.PHP Equivalente JAXB

+0

JAXB fa due cose: la generazione di codice java da schema XML e l'associazione runtime di XML agli oggetti java. Quale vuoi? – skaffman

+0

Runtime binding of XML-> Object. –

risposta

8

ero anche cercando di trovare la stessa cosa prima, ma non ci riuscì. Così ho deciso di scrivere la mia libreria per PHP 5.3 che rispecchia le annotazioni di JAXB per legare oggetti a XML.

Check it out qui: https://github.com/lampjunkie/xml-hitch

Speriamo che gli altri troveranno questo utile.

2

ero alla ricerca di qualcosa di simile a JAXB, ma per PHP,

PiXB sembra simile a JAXB, in realtà non ho provato, ma guardando gli esempi sembra promettente

3

ho scritto un semplice e in base alle annotazioni PAXB: https://github.com/ziollek/PAXB. Controlla se questa soluzione è sufficiente.

classi campioni con XML annotazioni vincolanti

/** 
* @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; 
    } 
} 

esempio Marshalling:

$sampleEntity = new SampleEntity(
    array(1,2,3), 
    new AttributeValueEntity('sample attribure', 'sample value'), 
    'Sample text' 
); 

echo PAXB\Setup::getMarshaller()->marshall($sampleEntity, true); 

e l'uscita:

<?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> 

deserializzazione

$xmlInput = '...'; //as above 
/** @var SampleEntity $sampleEntity */ 
$sampleEntity = PAXB\Setup::getUnmarshaller()->unmarshall($xmlInput, 'SampleEntity'); 
0

C'è un pacchetto di compositore per esso: sabre/xml. È possibile installarlo con il compositore richiede sabre/xml. C'è una home page per tutorial ed esempi Vedi http://sabre.io/xml/

E 'facile da usare e ricco di funzionalità e attivamente mantenuto.

+1

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18781883) –