Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/03/2004, 09:42
Avatar de Helbira
Helbira
 
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
u_U... ya encontré una solución.

La dejo aquí puesta por si alguien la necesita.

biblioteca.xml

Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml
-stylesheet type="text/xsl" href="2XMLin1XSL.xsl" ?>
<biblioteca>
   <categoria idCategoria="1">Ciencia Ficción</categoria>
   <categoria idCategoria="2">Terror</categoria>
   <categoria   idCategoria="3">Técnico</categoria>
</biblioteca>

libro.xml

Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<libros>
   <libro idCategoria="3">
      <titulo>Mis terrores favoritos 2</titulo>
      <capitulo orden="1">
         <titulo>Introduccion 2</titulo>
         <texto>El objetivo de este archivo es conseguir mostrar la información de este xml junto con la información de otro xml distinto en una misma página html.</texto>
      </capitulo>
      <capitulo orden="2">
         <titulo>Éxito conseguido 2</titulo>
         <texto>De momento no se ha conseguido ningún éxito.  </texto>
      </capitulo>
   </libro>
   <libro idCategoria="1">
      <titulo>Mis terrores favoritos</titulo>
      <capitulo orden="1">
         <titulo>Introduccion</titulo>
         <texto>El objetivo de este archivo es conseguir mostrar la información de este xml junto con la información de otro xml distinto en una misma página html.</texto>
      </capitulo>
      <capitulo orden="2">
         <titulo>Éxito conseguido</titulo>
         <texto>De momento no se ha conseguido ningún éxito.  </texto>
      </capitulo>
   </libro>
</libros>

2XMLin1XSL.xsl

Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="biblioteca">
      <html>
         <head>
            <title>Dos XML en Un XSL</title>
         </head>
         <body>
            <for-each select="categoria">
               <xsl:apply-templates select="categoria"/>
            </for-each>
         </body>
      </html>
   </xsl:template>
   <xsl:template match="categoria">
      <xsl:variable name="id" select="@idCategoria"/>
      <xsl:variable name="cat" select="document('libro.xml')"/>
      <xsl:for-each select="$cat/libros/libro[@idCategoria=$id]">
         <!-- ojo.. se está mezclando justo en este punto etiquetas de los dos archivos xml -->
         <p>
            <b>
               <font size="+2">
                  <xsl:apply-templates select="titulo"/>
               </font>
            </b>
         </p>
         <xsl:for-each select="capitulo">
            <xsl:sort select="orden"/>
            <xsl:apply-templates select="."/>
         </xsl:for-each>
      </xsl:for-each>
   </xsl:template>
   <xsl:template match="capitulo">
      <b>
         <xsl:value-of select="titulo"/>
      </b>
      <p>
         <xsl:value-of select="texto"/>
      </p>
   </xsl:template>
</xsl:stylesheet>
Nótese que las estructuras xml de los dos archivos han cambiado porque no me parecía que tuviera mucha lógica la que propuse inicialmente.

La llamada para verlo rular sería abrir en el navegador Internet Explorarer el archivo biblioteca.xml que ya tiene asignado la hoja de estilo XSL.

De la forma que están enlazados los 3 archivos es para ponerlos en la misma carpeta.

Un beso

Última edición por Helbira; 24/03/2004 a las 09:44