2010-03-28 14 views
9

Czy istnieje odpowiednik PHP dla JAXB? Okazało się to bardzo przydatne w rozwoju Java, a jako nowy PHP'er chciałbym użyć tych samych pojęć, które JAXB zapewnia w świecie PHP.Odpowiednik JAXB PHP

+0

JAXB robi dwie rzeczy - generowanie kodu java z XML Schema i powiązanie XML z obiektami Java w czasie wykonywania. Którą chcesz? – skaffman

+0

Wiązanie w czasie wykonywania XML-> Object. –

Odpowiedz

8

ja też próbuje zanim znajdziesz to samo, ale nie mógł. Dlatego zdecydowałem się napisać własną bibliotekę dla PHP 5.3, która odzwierciedla adnotacje JAXB do wiązania obiektów do XML.

Sprawdź to tutaj: https://github.com/lampjunkie/xml-hitch

Mam nadzieję, że inni będą mogli to użyteczne.

2

szukałem czegoś podobnego do JAXB ale dla PHP,

PiXB wydaje się podobny do JAXB, faktycznie ja nie próbowałem, ale patrząc na przykładach wydaje się obiecujący

3

Napisałem prosty i na podstawie adnotacji PAXB: https://github.com/ziollek/PAXB. Sprawdź, czy to rozwiązanie jest wystarczające.

Przykładowe zajęcia z XML Binding adnotacji

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

rozrządowych Przykład:

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

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

i wyjściowych:

<?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'); 
0

Jest to pakiet kompozytora: saber/xml. Można go zainstalować z kompozytorem wymaga saber/xml. Istnieje strona główna do samouczków i przykładów. Zobacz http://sabre.io/xml/

Jest łatwy w obsłudze i funkcjonalny.

+1

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/18781883) –