XSL - Xsl y redirect.

 
Vista:

Xsl y redirect.

Publicado por Kiko Trena (2 intervenciones) el 29/09/2001 17:43:51
Hola de nuevo. Me ha surgido un nuevo problema. Resulta que ahora me piden que estructure un html en varios xml, para ello he de utilizar redirect para tener multiples archivos de salida. El problema surge cuando intento hacer que cada <h2> sea un <apartado>, conteniendo los <p>, <img> y <a> que hay hasta el siguiente <h2>. No se como "decirle" con xsl y redirect "mete todo esto en un archivo xml hasta que encuentres EL SIGUIENTE H2". Si alguien puede echarme una mano se lo agradecería mucho. Saludos y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Estructurando HTML en múltiples XML utilizando redirect

Publicado por Alejandro (227 intervenciones) el 04/07/2023 22:48:27
Para estructurar un HTML en varios XML utilizando redirect y agrupar elementos hasta el siguiente `<h2>` en un `<apartado>`, puedes seguir los siguientes pasos:

1. Crea un archivo principal XSL que utilizará redirect para generar múltiples archivos XML. Supongamos que tu archivo principal XSL se llama `estructurar.xsl`. Asegúrate de tener la declaración `xmlns:exsl="http://exslt.org/common"` en tu archivo XSL para poder utilizar las extensiones de EXSLT.

2. En tu archivo principal XSL, define un template para el elemento raíz de tu XML de salida. Este template redirigirá la salida a diferentes archivos XML según encuentre `<h2>` en el HTML original. Utiliza las funciones de EXSLT como `exsl:node-set` y `exsl:document` para redirigir la salida. Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>
 
<xsl:template match="html">
  <xsl:variable name="output-doc">
    <xsl:apply-templates select="body/h2"/>
  </xsl:variable>
 
  <!-- Redirigir la salida a diferentes archivos XML -->
  <xsl:variable name="output" select="exsl:node-set($output-doc)"/>
  <xsl:for-each select="$output/*">
    <xsl:result-document href="{concat('output-', position(), '.xml')}">
      <xsl:copy-of select="."/>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>
<xsl:template match="h2">
  <!-- Generar un <apartado> con los elementos hasta el siguiente <h2> -->
  <apartado>
    <xsl:apply-templates select="following-sibling::*[preceding-sibling::h2[1] = current()]"/>
  </apartado>
</xsl:template>

En este ejemplo, el template para el elemento raíz del HTML se encarga de aplicar los templates a los elementos `<h2>` dentro del cuerpo (`body`) del HTML. Cada `<h2>` activará el template correspondiente y generará un `<apartado>` con los elementos hasta el siguiente `<h2>`.

3. Define templates adicionales para los elementos `<p>`, `<img>` y `<a>` según tus necesidades. Estos templates serán aplicados dentro del template para `<h2>` y se encargarán de procesar esos elementos.

Con esta estructura, al ejecutar la transformación XSLT utilizando el archivo principal `estructurar.xsl` como entrada, se generarán múltiples archivos XML de salida, cada uno correspondiente a un `<h2>` y su contenido hasta el siguiente `<h2>`. Los archivos de salida se nombrarán `output-1.xml`, `output-2.xml`, etc., dependiendo del número de `<h2>` encontrados en el HTML original.

Recuerda ajustar y personalizar el código según la estructura y los elementos específicos de tu HTML.

Espero que esta solución te ayude a estructurar tu HTML en varios XML utilizando redirect en XSL.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar