2011-02-09 14 views
6

Quiero crear un archivo xml a partir de los datos proporcionados por los usuarios.¿Cómo puedo crear un documento xml basado en un esquema usando php?

Puedo usar simplexml o DOMDocument para crear archivos xml e incluso hay una opción en DOMDocument para verificar el documento xml con un esquema.

Pero lo que necesito es, en lugar de crear nodos y agregar valores usando clases xml, ¿puedo crear un archivo xml a partir de los datos almacenados en otro lugar con respecto a un esquema?

Creo que en .net hay una opción para escribir en xml desde la lectura del conjunto de datos ... Pero no pude encontrar tal cosa en PHP.

¿Es posible y hay clases para eso?

Si no hay clases predefinidas, ¿al menos alguna ayuda sobre cómo hacerlo?

Editar:

estoy editando esta pregunta porque parece que algunos de ustedes no es clara acerca de mi .. requisito

Por ejemplo, si el esquema es

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

y si el usuario da los datos para pan, nombre, padre, dirección, dob entonces necesito crear el documento xml automáticamente al hacer coincidir el esquema y los datos.

El esquema puede cambiar de vez en cuando, por lo que no quiero editar todo el código para crear/cambiar nodos y atributos. Solo necesito señalar el nuevo esquema, para que el código cree el xml basado en eso.

+0

He creado una clase php simple que crea archivos xml, pero no estoy seguro de que sea eso lo que está buscando. Como dijo Gordon, un UseCase sería útil. – FLY

Respuesta

-1

creo this debería ayudar si desea crear archivos XML utilizando funciones DOM de PHP

+1

El artículo no menciona la palabra "esquema" una vez. Es interesante, pero poco probable, lo que el OP está buscando. – Gordon

+0

Ya utilizo DOMDocument para crear nodos pero no es lo que quiero ... Quiero buscar el esquema y crearlo más tarde (para esto podemos usar DOMDocument). Si no hay clases, al menos una pista para hacer esto ayudará. – Vijay

0

Su pregunta no tiene una respuesta sencilla. Se puede hacer con meta programación, pero va a ser largo. De hecho, cuanto más complicado sea su XSD, más largo será su código. Sin embargo, si utiliza un XSD simple con tipos primitivos xs: *, es fácil definir un convertidor de un tipo PHP en una cadena XML.

Al analizar su XSD puede crear dinámicamente una matriz, que se verá así no modificable uno:

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

Si la entrada del usuario es algo así como:

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

A continuación, puede producir dinámicamente que:

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

La clave es la función de conversión. Al usar el operador 'instanceof' y las funciones 'is_ *' puede determinar el tipo de datos del primer argumento. Así que todo lo que tiene que hacer es devolver una cadena XML escapó para cada una de las posibles combinaciones:

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

...

entonces es recta hacia adelante para crear el código XML final.

Cuestiones relacionadas