XSL - <xsl:copy

 
Vista:

<xsl:copy

Publicado por Antonio Perez (1 intervención) el 31/08/2006 15:11:02
Tengo un xml con los datos de las empresas y demas.
Necesito una salida xml modificando los datos donde coga el nombre de la empresa
<nombre> nombre empresa S.A. </nombre> y la salida
sea:

<nombre forma-juridica="S.A."> Nombre Empresa </nombre>
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

Modificar datos de salida XML con atributos

Publicado por Alejandro (227 intervenciones) el 05/07/2023 22:03:08
Aquí tienes una solución para modificar los datos de salida en XML y agregar un atributo "forma-juridica" al elemento "nombre" utilizando XSL.

Supongamos que tienes un XML con la siguiente estructura:

1
2
3
4
5
<empresas>
  <empresa>
    <nombre>Nombre Empresa S.A.</nombre>
  </empresa>
</empresas>

Puedes utilizar XSL para transformar los datos y obtener la salida deseada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <!-- Template para el elemento "nombre" -->
  <xsl:template match="nombre">
    <nombre forma-juridica="{substring-after(., ' ')}">
      <xsl:value-of select="substring-before(., ' ')" />
    </nombre>
  </xsl:template>
 
  <!-- Template de identidad para copiar los demás elementos sin cambios -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>
 
  <!-- Template principal para el elemento raíz -->
  <xsl:template match="empresas">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>
 
</xsl:stylesheet>

En este ejemplo, utilizamos el template para el elemento "nombre" y aplicamos las siguientes transformaciones:

1. En el atributo "forma-juridica" del elemento "nombre", utilizamos la función `substring-after()` para obtener el texto después del primer espacio.
2. En el contenido del elemento "nombre", utilizamos la función `substring-before()` para obtener el texto antes del primer espacio.

El resultado de aplicar esta transformación a tu XML de entrada sería:

1
2
3
4
5
<empresas>
  <empresa>
    <nombre forma-juridica="S.A.">Nombre Empresa</nombre>
  </empresa>
</empresas>

Recuerda que puedes ajustar el código según tus necesidades específicas y aplicarlo a otras consultas que tengas en el futuro.
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