2011-02-02 4 views
6

私はXSDファイルを持っており、そのXSDファイルから有効なサンプルXMLを生成する必要があります。 たとえば、次のXSD与えられた:PHPのXSDテンプレートを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でのソリューションを探しましたが、2つだけに遭遇します可能な解決策ではあるが成功しない。

  1. SDO_DAS_XMLの使用。しかし、これはphp_sdo.dllの利用可能性に依存します。php_sdo.dllはWindows上で実際に動作するバージョンではないようです。

  2. 2回目の試行はgithub.com/moyarada/XSD-to-PHPを見ていたか forums.devshed.com/php-development-5/xml-schema-binding-to-php-code-jaxb- equivalent-199799.html しかし、これらはXSDを解析してPHPクラスに変換することを目的としており、XSDを単純なクリーンなXML(上記と同様)に変換するための一般的なenoguhではありません。

任意のアイデアやソリューションが高く評価されている:)

感謝を!

+0

私は、XSDルール(デフォルト/固定値、属性などを含む)に従って空のXMLとして生成されたこのXSDの最も単純な形式が必要であることを明確にします。 –

答えて

0

私はPHPで何かを見つけることができませんでしたが、私はこの出くわした - JAVAでhttp://sourceforge.net/projects/camprocessor/

そのが、そのオープンソースとして、あなたは、与えられたXSDからXMLサンプルの生成に使用されている正確なJavaクラスを見つけてみてください。その後、同じクラスのロジックが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

私は1つを自分で必要なので、私は解決策を見つけるためにあなたの探求につまずきました。解決策を見つけるための探求に皆のために

XSD2PHP Originalを発見し、Updated Versionより良い私のニーズに合うように、それをフォーク。

関連する問題