2011-02-09 2 views
6

Я хочу создать xml-файл из данных, данных пользователями.Как создать XML-документ на основе схемы с использованием php?

Я могу использовать simplexml или DOMDocument для создания xml-файлов, и даже есть возможность в DOMDocument проверить документ xml с помощью схемы.

Но мне нужно вместо создания узлов и добавления значений с помощью классов xml, могу ли я создать xml-файл из данных, хранящихся где-нибудь еще в связи со схемой?

Я думаю, что в .net есть возможность записать в xml из чтения из набора данных. Но я не мог найти такую ​​вещь в PHP.

Возможно ли это, и есть ли какие-либо классы для этого?

Если нет предопределенных классов, по крайней мере, любая помощь по любым способам этого?

Edit:

я редактирую этот вопрос, потому что кажется, что некоторые из вас не ясно, о моем требовании ..

Например, если схема является

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
attributeFormDefault="unqualified"> 
<xs:element name="formpatterns"> 
<xs:element name="pan" type="pantype"/> 
<xs:element name="name" type="nametype"/> 
<xs:element name="fatherName" type="nametype"/> 
<xs:group ref="address"/> 
<xs:element name="dob" type="xs:date"/> 
</xs:schema> 

, и если пользователь дает данные для панорамирования, имени, имени отца, адреса, dob, то Мне нужно создать XML-документ автоматически, сопоставляя схему и данные.

Схема может время от времени меняться, поэтому я не хочу редактировать весь код для создания/изменения узлов и атрибутов. Мне нужно просто указать новую схему, чтобы код создавал на основе xml.

+0

Я создал простой класс php, который создает файлы xml, но не уверен, что это то, что вы ищете. Как сказал Гордон, UseCase был бы полезен. – FLY

ответ

1

Посмотрите на https://github.com/moyarada/XSD-to-PHP, он компилирует привязки PHP из XSD, а затем вы можете сериализовать классы PHP в XML.

+1

Проект, похоже, арестован – thomaf

-1

Я думаю this должна помочь вам, если вы хотите создать XML-файлы с помощью DOM функции РНР

+1

В статье не упоминается слово «схема» один раз. Интересно, но маловероятно, что ищет ОП. – Gordon

+0

Я уже пользователь DOMDocument для создания узлов, но это не я хочу. Я хочу искать схему и создавать ее позже (для этого мы можем использовать DOMDocument). Если нет классов, по крайней мере намек на это поможет. – Vijay

0

Ваш вопрос не имеет однозначного ответа. Это можно сделать с помощью метапрограмм, но это будет долгим. На самом деле, чем сложнее ваш XSD, тем дольше будет ваш код. Тем не менее, если вы используете простой XSD с примитивными типами xs: *, легко определить конвертер из PHP-типа в строку XML.

Путем анализа вашего XSD можно динамически создать массив, который будет выглядеть так жестко закодированы один:

$meta = array(
    'name' => 'xs:string', 
    'dob' => 'xs:date' 
); 

Если вводимые пользователем что-то вроде:

$input = array(
    'name' => 'Name', 
    'dob' => new DateTime('30 years ago') 
); 

Тогда вы можете производят динамически то, что:

$output = array( 
    'name' => convert($input['name'] , $meta['name']), 
    'dob' => convert($input['dob'] , $meta['dob']) 
); 

Ключом является функция преобразования. Используя оператор «instanceof» и «is_ *», вы можете определить тип данных первого аргумента. Так что все, что вам нужно сделать, это возвращать XML спаслась строка для каждого из возможных комбинаций:

php string --> xml 'xs:string' 
php DateTime --> xml 'xs:date' 

...

Тогда прямо вперед, чтобы создать свой окончательный XML.