2011-02-02 17 views
6

Tôi có một tệp XSD và tôi cần tạo XML mẫu hợp lệ từ tệp XSD đó. Ví dụ, do XSD sau:Biến đổi một mẫu XSD thành một cá thể XML trong PHP

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Address"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Recipient" type="xs:string" default="John Doe" /> 
     <xs:element name="Street" type="xs:string" /> 
     <xs:element name="age" type="xs:integer"/> 
     <xs:element name="dateborn" type="xs:date"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Generate XML sau đây:

<xml> 
    <Address> 
     <Recipient>John Doe</Recipient> 
     <Street></Street> 
     <age>43</age> 
     <dateborn>1970-03-27</dateborn> 
    </Address> 
</xml> 

tôi đã tìm kiếm một giải pháp trong PHP đó là khả năng thực hiện điều này, nhưng chỉ để đi qua hai các giải pháp khả thi nhưng không thành công.

  1. Sử dụng SDO_DAS_XML. Tuy nhiên, điều này phụ thuộc vào khả năng sẵn có của php_sdo.dll, mà dường như không có phiên bản nào thực sự hoạt động trên Windows.

  2. Lần thử thứ hai là xem github.com/moyarada/XSD-to-PHP hoặc diễn đàn.devshed.com/php-development-5/xml-schema-binding-to-php-code-jaxb- Tuy nhiên, chúng được nhắm mục tiêu vào phân tích cú pháp XSD và chuyển đổi sang các lớp PHP và dường như không phải là chung chung để biến đổi bất kỳ XSD thành một XML đơn giản (như trên).

Bất kỳ ý tưởng hoặc giải pháp được nhiều đánh giá cao :)

Cảm ơn!

+0

Tôi sẽ làm rõ, rằng tôi cần hình thức đơn giản nhất của XSD này được tạo dưới dạng XML trống theo các quy tắc XSD (bao gồm các giá trị mặc định/cố định, thuộc tính, v.v.) –

Trả lời

0

tôi không tìm thấy bất cứ điều gì trong PHP nhưng tôi đi qua này - http://sourceforge.net/projects/camprocessor/

của nó trong JAVA nhưng như mã nguồn mở của nó, bạn có thể thử tìm lớp java chính xác được sử dụng cho thế hệ mẫu XML từ XSD nhất định. Sau đó, logic của cùng một lớp có thể được thực hiện trong PHP.

Âm thanh có thể không thực tế, nhưng điều này đã đóng mà tôi có thể nhận được! : |

0

Tôi nhận thấy rằng cách hợp lý nhất để thực hiện tác vụ này là xử lý XSD của bạn dưới dạng bất kỳ XML nào, sử dụng DOMDocument để phân tích cú pháp và tạo các phiên bản XML chuyên biệt của bạn.

  • Phương pháp này giả định rằng XSD của bạn sẽ luôn có cùng cấu trúc, chỉ tên khác nhau cho trường và bạn quan tâm đến một dạng XML đơn giản, nghĩa là các nút và không có gì khác.
  • Lợi ích của phương pháp đó là linh hoạt, chỉ cần chỉnh sửa vòng lặp foreach để sửa đổi cấu trúc đặc biệt của bạn.
//Build the template from the schema: 
$schema = new DOMDocument(); 
$schema->loadXML($schemaXSDFile); //that is a String holding your XSD file contents 
$fieldsList = $schema->getElementsByTagName('element'); //get all elements 
$metadataTemplate = ''; 
foreach ($fieldsList as $element) { 
    //add any special if statements here and modify the below to include any attributes needed 
    $key = $element->getAttribute('name'); 
    $metadataTemplate .= '<' . $key . '>' . '</' . $key . '>'; 
} 

//Manipulate the template adding your fields values: 
$metadataXml = simplexml_load_string($metadataTemplate); 
$metadataXml->fieldName = 'value'; 
0

Tôi tình cờ tìm kiếm giải pháp vì tôi cần một bản thân.

Đối với tất cả mọi người trên quest để tìm một giải pháp:

Tìm thấy XSD2PHP Original và chia hai nó để phù hợp với nhu cầu của tôi tốt hơn Updated Version.

Các vấn đề liên quan