XSL - Cortar un String

 
Vista:
sin imagen de perfil
Val: 1
Ha mantenido su posición en XSL (en relación al último mes)
Gráfica de XSL

Cortar un String

Publicado por Claudio (1 intervención) el 03/10/2019 20:05:31
Tengo un archivo en xls que se debe imprimir.
Las lineas que trae son las siguientes :

1
2
3
4
5
6
7
8
<Detalle>
    <NmbItem>ESTADO DE PAGO 9</NmbItem>
    <DscItem>DESPUES SE APLICAN LAS TARIFAS DE SUSCRIPCION MENSUALES. RIGEN TERMINOS Y CONDICIONES. </DscItem>
</Detalle>
<Detalle>
    <NmbItem>ESTADO DE PAGO 10</NmbItem>
    <DscItem>ESPECIFICA CLARAMENTE EN EL TITULO EL MOTIVO DE TU CONSULTA. SOLO ASI AUMENTARAS LAS POSIBILIDADES DE RESPUESTA DE TU MENSAJE </DscItem>
</Detalle>

El tag DscItem debe cortarse cada 30 caracteres e imprimir en la siguiente linea hasta el siguiente detalle. A su vez debo controlar que no se pase de las 15 lineas de impresión.
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

Dividir y controlar líneas de impresión en un archivo XML

Publicado por Alejandro (227 intervenciones) el 07/07/2023 19:16:43
Para cortar el contenido del elemento `<DscItem>` cada 30 caracteres y controlar que no se pase de las 15 líneas de impresión, puedes utilizar XSLT para realizar la transformación. Aquí tienes un ejemplo de cómo podrías hacerlo:

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
26
27
28
29
30
31
32
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" indent="no"/>
 
  <xsl:template match="/">
    <xsl:apply-templates select="//Detalle"/>
  </xsl:template>
 
  <xsl:template match="Detalle">
    <xsl:variable name="text" select="normalize-space(DscItem)"/>
    <xsl:call-template name="printLines">
      <xsl:with-param name="text" select="$text"/>
    </xsl:call-template>
  </xsl:template>
 
  <xsl:template name="printLines">
    <xsl:param name="text"/>
 
    <xsl:choose>
      <xsl:when test="string-length($text) &gt; 30">
        <xsl:value-of select="substring($text, 1, 30)"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:call-template name="printLines">
          <xsl:with-param name="text" select="substring($text, 31)"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
        <xsl:text>&#10;</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

Este código XSLT divide el contenido del elemento `<DscItem>` en líneas de no más de 30 caracteres y las imprime una por línea. Si el contenido supera los 30 caracteres, se corta y se imprime en líneas adicionales. Además, se controla que no se excedan las 15 líneas de impresión.

Puedes aplicar este XSLT a tu archivo XML para obtener la salida con las líneas de impresión divididas correctamente. Ten en cuenta que el resultado se generará en formato de texto, por lo que deberás ajustar la salida para imprimirlo o utilizarlo según tus necesidades.
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