2010-03-28 25 views
9

Có tương đương PHP với JAXB không? Nó được chứng minh là rất hữu ích cho việc phát triển Java, và như một PHP mới, tôi muốn sử dụng cùng một khái niệm mà JAXB cung cấp trong một thế giới PHP.PHP JAXB Equivalent

+0

JAXB thực hiện hai việc - tạo mã java từ XML Schema và ràng buộc thời gian chạy của XML đối với các đối tượng java. Bạn muốn cái nào? – skaffman

+0

Thời gian chạy ràng buộc của XML-> Đối tượng. –

Trả lời

8

Tôi cũng đang cố gắng tìm điều tương tự trước đây nhưng không thể. Vì vậy, tôi quyết định viết thư viện riêng của mình cho PHP 5.3, nó phản ánh các chú thích của JAXB để liên kết các đối tượng với XML.

Kiểm tra nó ra ở đây: https://github.com/lampjunkie/xml-hitch

Hy vọng rằng những người khác sẽ thấy hữu ích này.

2

tôi đang tìm kiếm một cái gì đó tương tự như JAXB nhưng đối với PHP,

PiXB dường như giống với JAXB, thực sự tôi đã không thử nó, nhưng nhìn vào ví dụ dường như hứa hẹn

3

Tôi đã viết một đơn giản và dựa trên các chú thích PAXB: https://github.com/ziollek/PAXB. Kiểm tra xem giải pháp này có đủ hay không.

lớp mẫu với các chú thích ràng buộc 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; 
    } 
} 

Marshalling dụ:

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

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

và đầu ra:

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

Có một gói trình soạn thảo cho nó: saber/xml. Bạn có thể cài đặt nó với nhà soạn nhạc yêu cầu saber/xml. Có một trang chủ cho các hướng dẫn và ví dụ Xem http://sabre.io/xml/

Thật dễ sử dụng và có tính năng phong phú và được duy trì tích cực.

+1

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18781883) –