Foros del Web » Programación para mayores de 30 ;) » Programación General »

Por favor, ayuda con XML,XSLT,XHTML y Schemas :S

Estas en el tema de Por favor, ayuda con XML,XSLT,XHTML y Schemas :S en el foro de Programación General en Foros del Web. Hola a todos. Bueno vereis, resulta que tengo que hacer un trabajo para la carrera sobre XHTML, XML, Schemas y XSLT. La verdad que yo ...
  #1 (permalink)  
Antiguo 10/01/2009, 04:26
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
Por favor, ayuda con XML,XSLT,XHTML y Schemas :S

Hola a todos.

Bueno vereis, resulta que tengo que hacer un trabajo para la carrera sobre XHTML, XML, Schemas y XSLT. La verdad que yo el tema web lo llevo un poco justo (mea culpa por tanto huir... en mis tiempos que tenía las asignaturas de programación en internet no las cogí porque por entonces solo veia por la red html y css...y pensaba que eso no valia para nada xDDD y fijate...). En fin, de forma resumida es sobre realizar un sitio web sobre una galería de arte virtual. Hay artistas, obras, exposiciones, etc.

Tengo realizado (y validado) los documentos .xml y .xsd. Ahora estoy "transformando" los documentos a html mediante XSLT. Pues bien, mi idea, para que fuera lo más "dinámico" posible es que haya una página principal (ya está hecha xD) en XHTML en el que tenga un texto introductorio y arriba un menú sencillo en el que contenga "Artistas", "obras", "Exposiciones", etc.

Bien, hasta aquí guay, el problema es el siguiente: Ahora me gustaría (aquí viene el "dinanismo" xd) que al pulsar por ejemplo "Artistas", mediante XSLT he generado un documento HTML en el cual sólamente aparece una cabecera simple (Artistas:) y, del documento "artistas.xml" únicamente coge los nombres de los artistas con un hiperenlace. La idea es que, al pulsar, sobre uno de los nombres, generase (mediante XSLT otra vez, supongo) otro documento en el que únicamente cogiera los datos de ese artista pulsado (nombre, dirección, foto, etc). La idea la quiero aplicar en todos los enlaces del menú (obras, exposiciones, etc).

La pregunta es: ¿Se puede hacer? Yo he pensado que mediante xsl:copy-of se podría (ya que genero otro xml únicamente con los datos del artista seleccionado... pero no me sale :S).

Lo he querido hacer así, por si el dia de mañana se crease un artista nuevo pues de este modo no tengo que tocar nada y se cargaría en el listado. Mis compis por ejemplo han hecho páginas XHTML "a pelo" con los nombres y según el que se pulse genera (coon XSLT) el documento con los datos del susodicho artista.

Otra duda que tengo es que cómo le paso el "valor" del artista seleccionado al xslt para que me genere el documento de ese artista (por ejemplo, si he pulsado al artista "Pepito Pérez" pues pasarle de alguna forma al XSLT "Oye generame un html con el xml de artistas pero sólo aquél cuyo nombre sea "Pepito Pérez"... ¿como seria?).

Siento si mis dudas son de novato, pero ya os digo, ahora mismo el mundo web es un poco "grande" y "anárquico" para mi :( (de hecho ahora tengo que ponerme enn el trabajo al dia de PHP, JavaScript, Ajax y los frames CodeIgniter y JQuery [mad] ).

saludos!
  #2 (permalink)  
Antiguo 27/01/2009, 05:08
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Por favor, ayuda con XML,XSLT,XHTML y Schemas :S

Hola ercea, yo estoy más o menos como tú, tengo que hacer un trabajo y tengo bastantes problemas xD, pero creo que tengo una solución para el tuyo:

no sé cómo es exactamente tu archivo xml pero supongo que tendrá etiquetas <artista> <obra> <exposición>... si tú sólo quieres ver los artistas puedes hacer una página artistas.php con el siguiente contenido

Código PHP:
<HTML><HEAD><TITLE>ARTISTAS</TITLE></HEAD>

<BODY>

<?php

$filename 
"loquesea.xml";

// Definición del contenido del fichero xml.
// Es importante escribir los elementos en mayúsculas.

$begin_array = array(

 
"ARTISTA"         => "<B>",
 
"OBRA"             => "<!--",
 
"EXPOSICION"  => "<!--"

);

$end_array = array(

 
"ARTISTA"         => "</B><BR>",
 
"OBRA"             => "-->",
 
"EXPOSICION"  => "-->"

);


function 
startElement($parser$name$attrs) {
    global 
$begin_array;
    
// ¡ Cuidado ! Aquí no se escribe == en el if porque es una funcion 
    // que va a utilizar el objeto xml.
    
if ($htmlexpr $begin_array[$name]) {print "$htmlexpr";}
}

function 
endElement($parser$name) {
    global 
$end_array;
    if (
$htmlexpr $end_array[$name]) {print "$htmlexpr";}
}

function 
characterData($parser$data) {
    print 
$data;
}

//Aquí empieza la lectura del fichero XML.
$xml_parser xml_parser_create();

// Opciones del objeto xml: no tener en cuenta las minúsculas.
xml_parser_set_option($xml_parserXML_OPTION_CASE_FOLDINGtrue);

// Manejadores de elemento inicial y final: qué es lo que tiene que hacer.
xml_set_element_handler($xml_parser"startElement""endElement");

// Manejador para los datos leídos.
xml_set_character_data_handler($xml_parser"characterData");

if (!(
$fp fopen($filename"r"))) {die("&iexcl;Error! no se puede abrir el fichero: ".$filename);}

// Leemos el fichero en bloques de 4KB.
while ($data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($fp))) {
            die(
sprintf("Error XML : %s en la l&iacute;nea %d",
        
xml_error_string(xml_get_error_code($xml_parser)),
            
xml_get_current_line_number($xml_parser)));
    }
// end del while

// Liberamos la memoria.
xml_parser_free($xml_parser);

?>

</BODY>

</HTML>
de este modo, se coge el documento "loquesea.xml" y según los vectores de inicio i fin lo que se harà es: el contenido de las etiquetas <artista> se escribirá en negrita, mientras que las etiquetas <obra> y <exposicion> estarán comentadas (<!-- texto -->) por lo que sólo serán visibles los autores.
De forma análoga se puede hacer obras.php y exposición .php, jugando con los vectores de inicio y fin y las correspondientes etiquetas del archivo .xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:21.