2011-02-02 10 views
6

Mam plik (i) XSD i muszę wygenerować poprawny przykładowy plik XML z tego pliku XSD. Na przykład, biorąc pod uwagę następujące XSD:Przekształcanie szablonu XSD do instancji XML w 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> 

generować następujące XML:

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

Szukałem rozwiązania w PHP, który jest zdolny do wykonywania tego, ale tylko do natknąć dwóch możliwe rozwiązania, ale bez powodzenia.

  1. Korzystanie z SDO_DAS_XML. Zależy to jednak od dostępności php_sdo.dll, na którą nie ma wersji, która faktycznie działa w systemie Windows.

  2. drugim razem było patrzeć na github.com/moyarada/XSD-to-PHP lub forums.devshed.com/php-development-5/xml-schema-binding-to-php-code-jaxb- equivalent-199799.html Jednak są one ukierunkowane na parsowanie XSD i przekształcanie na klasy PHP i nie wydają się być generycznymi enoguh, aby przekształcić dowolny XSD w prosty czysty XML (jak wyżej).

Wszelkie pomysły lub rozwiązania są mile widziane :)

Dzięki!

+0

Wyjaśnię, że potrzebuję najprostszej formy tego XSD wygenerowanego jako pusty XML zgodnie z regułami XSD (włączając domyślne/stałe wartości, atrybuty itp.) –

Odpowiedz

0

Nie mogę znaleźć coś w PHP, ale natknąłem się na to - http://sourceforge.net/projects/camprocessor/

ITS w JAVA ale jako open-source, można spróbować znaleźć dokładną klasy java wykorzystywany do generowania próbek XML z danymi XSD. Po tym logika tej samej klasy może zostać zaimplementowana w PHP.

Może brzmieć niepraktycznie, ale to jest zamknięte Mogłem dostać! : |

0

Odkryłem, że jedynym rozsądnym sposobem wykonania tego zadania jest potraktowanie twojego XSD jako dowolnego XML, użycie DOMDocument do przeanalizowania go i zbudowania z niego wyspecjalizowanych instancji XML.

  • Ta metoda zakłada, że ​​twój XSD będzie zawsze miał taką samą strukturę, tylko różne nazwy dla pól i że interesuje Cię bardzo prosta postać instancji XML, co oznacza, węzły i nic więcej.
  • Zaletą tej metody jest elastyczność, wystarczy edytować pętlę foreach, aby zmodyfikować swoją specjalną strukturę.
//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

natknąłem się na dążeniu do znalezienia rozwiązania, ponieważ potrzebowałem jeden ja.

Dla wszystkich w dążeniu do znalezienia rozwiązania:

Znaleziony XSD2PHP Original i rozwidlony go dopasować do moich potrzeb lepszych Updated Version.

Powiązane problemy