2011-02-02 13 views
6

Ho un file XSD e devo generare un XML di esempio valido da quel file XSD. Ad esempio, dato il seguente XSD:Trasformazione di un modello XSD in un'istanza XML in 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> 

generare i seguenti XML:

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

Ho cercato una soluzione in PHP che è in grado di eseguire questo, ma solo per imbattersi in due possibili soluzioni ma senza successo.

  1. Utilizzo di SDO_DAS_XML. Tuttavia, questo dipende dalla disponibilità di php_sdo.dll, a cui non sembra esserci una versione che funziona effettivamente su Windows.

  2. secondo tentativo è stato quello di esaminare github.com/moyarada/XSD-to-PHP o forums.devshed.com/php-development-5/xml-schema-binding-to-php-code-jaxb- equivalent-199799.html Tuttavia, questi sono mirati all'analisi di XSD e alla trasformazione in classi PHP e non sembrano essere un enoguh generico per trasformare qualsiasi XSD in un semplice XML pulito (come sopra).

Tutte le idee o le soluzioni sono molto apprezzati :)

Grazie!

+0

Chiarire, ho bisogno della forma più semplice di questo XSD generato come XML vuoto in base alle regole XSD (inclusi valori predefiniti/fissi, attributi, ecc.) –

risposta

0

non ho trovato nulla in PHP, ma mi sono imbattuto in questo - http://sourceforge.net/projects/camprocessor/

sua in Java, ma come il suo open-source, si può provare a trovare esatto classe Java utilizzata per la generazione di XML di esempio dal dato XSD. Dopo che la logica della stessa classe può essere implementata in PHP.

Può sembrare impraticabile, ma questo è chiuso potrei ottenere! : |

0

Ho trovato che l'unico modo ragionevole per eseguire questa operazione è quello di trattare il tuo XSD come qualsiasi XML, utilizzare DOMDocument per analizzarlo e creare da esso istanze XML specializzate.

  • Questo metodo presuppone che il XSD avrà sempre la stessa struttura, solo nomi diversi per i campi, e che siete interessati a una forma molto semplice di esempio XML, cioè i nodi e nulla più.
  • Il vantaggio di questo metodo è flessibile, è sufficiente modificare il ciclo foreach per modificare la struttura speciale.
//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

sono incappato in una missione per trovare una soluzione perché avevo bisogno di uno io.

Per tutti sulla ricerca per trovare una soluzione:

Trovato XSD2PHP Original e biforcuta per adattarlo alle mie esigenze meglio Updated Version.

Problemi correlati