[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: DBI y XML



Rafael F. Rodríguez dijo [Wed, Oct 29, 2003 at 01:44:52PM +0000]:
> Hola lista :-) .

¡Hola tonta!

>      Primero perdonad por el ot, pero necesito una ayudita con perl,
> pero no encuentro solución en ningún sitio :-(.

Te sugiero perl@tlali.iztacala.unam.mx ;-)

>      El problema es el siguiente, con dbi abro con un select una
> relación
> de datos de diversas tablas, mi problema es que quiero exportarla a
> un archivo xml basandome en una estructura que ya me indicaron en un
> archivo xsd.
> (...)
> La salida del xml debe ser como lo que sigue:
> <?xml version="1.0" encoding="UTF-8">
> <Prestados xmins=""http://www.midominio/listado";
>   xmins:sxi=""www.w3org/2001/XMLSchema-isntance"
>   xsi:schemaLocation="http://www.midominio/listado.xsd";>
> <Persona>
>   <Nombre>Rafael</Nombre>
>     <Prestamos>
>       <Libro>Ingles</Libro>
>       <Libro>Linux</Libro>
>       <Libro>Perl</Libro>
>     </Prestamos>
> </Persona>
> <Persona>
>    <Nombre>Angel</Nombre>
>    <Prestamos>
>       <Libro>Mates</Libros>
>    </Prestamos>
> </persona>
> </Prestados>
> 
>      He intentando de varias formas como XML::simple y con
> XML::generator::DBI, pero aun no lo he conseguido, ¿alguna idea ó
> código?

Ummm... Mira, esta definitivamente no es una solución elegante - No
uso ningún módulo para generar XML, pero como sea, esto sirve para tu
necesidad específica. 

# Mandamos el preámbulo de XML
print << 'XML_HEADER_END';
<?xml version="1.0" encoding="UTF-8">
<Prestados xmins=""http://www.midominio/listado";
  xmins:sxi=""www.w3org/2001/XMLSchema-isntance"
  xsi:schemaLocation="http://www.midominio/listado.xsd";>
XML_HEADER_END

# Conforme vayamos recibiendo los datos, los vamos soltando.
$sth1 = $dbh->prepare('SELECT codigo, nombre FROM nombre');
$sth2 = $dbh->prepare('SELECT codigo_libro FROM libros_prestados WHERE
    codigo_nombre_prestado = ?'); 
$sth1->execute;

while (my @persona = $sth1->fetchrow_array) {
    print "<Persona>\n  <Nombre>$persona[1]</Nombre>  <Prestamos>\n";
    # Ejecutamos la consulta 2 con el ID de la persona en cuestión
    $sth2->execute($persona[0]);
    while (my @libro = $sth2->fetchrow_array) {
        print "    <Libro>$libro[1]</Libro>\n";
    }
    print "  </Prestamos>\n</Persona>\n";
}
print "</Prestados>\n";


No lo probé, sólo lo escribí, así que probablemente haya algún
errorcillo sintáctico por ahí... Pero para escupir XML sencillito,
funciona. 

Saludos,

-- 
Gunnar Wolf - gwolf@gwolf.cx - (+52-55)5630-9700 ext. 1366
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF

Attachment: signature.asc
Description: Digital signature


Reply to: