2011-02-02 41 views
6

我有一個XSD文件,我需要從該XSD文件生成有效的示例XML。 例如,給出下面的XSD:將XSD模板轉換爲PHP中的XML實例

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

生成以下XML:

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

我已經搜查了PHP中的解決方案,它能夠執行這一點,但只來跨兩個可能的解決方案,但沒有成功。

  1. 使用SDO_DAS_XML。但是,這取決於php_sdo.dll的可用性,似乎並沒有一個版本可以在Windows上運行。

  2. 第二個嘗試是看github.com/moyarada/XSD-to-PHP或 forums.devshed.com/php-development-5/xml-schema-binding-to-php-code-jaxb-等效於199799.html 但是,這些目標是解析XSD和轉換爲PHP類,似乎並不是將任何XSD轉換爲簡單幹淨的XML(如上所述)的通用enoguh。

任何意見或解決方案,我們非常感激:)

謝謝!

+0

我會澄清一點,我需要根據XSD規則(包括默認/固定值,屬性等)將此XSD的最簡單形式生成爲空XML。 – 2011-02-02 18:41:32

回答

0

我沒有發現任何PHP,但我碰到這個來了 - http://sourceforge.net/projects/camprocessor/

其在JAVA但由於其開放源代碼,您可以嘗試找到確切的java類被用於從給定的XSD XML樣本生成。之後,可以用PHP實現同一個類的邏輯。

聽起來不切實際,但這是封閉的我可以得到! :|

0

我發現執行此任務的唯一合理方法是將您的XSD視爲任何XML,使用DOMDocument解析它並從中構建您的專用XML實例。

  • 此方法假定您的XSD將始終具有相同的結構,只是不同的名稱字段和你感興趣的XML實例的形式非常簡單,這意味着節點,僅此而已。
  • 該方法的好處是靈活性,只需編輯foreach循環來修改您的特殊結構。
//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

我偶然發現了你的追求,以找到一個解決辦法,因爲我需要一個自己。

爲大家尋求找到一個解決方案:

發現XSD2PHP Original和分叉它適合我的需要更好Updated Version