Agregar nuevo elemento debajo del elemento existente utilizando XSLT.
Tengo un elemento llamado “Dispute” y quiero agregar un nuevo elemento llamado “Records” debajo de ese elemento.
Ejemplo: El XML actual está en este formato utilizando la tecnología SSIS
<root>
<Grade></Grade>
<Fuel>
<Quantity/>
<Additional/>
<Dispute>0</Dispute>
</Fuel>
<Fuel>
<Quantity/>
<Additional/>
<Dispute>1</Dispute>
</Fuel>
</root>
Necesito agregar un nuevo elemento debajo de dispute.
<root>
<Grade></Grade>
<Fuel>
<record>1</record>
<Quantity/>
<Additional/>
<Dispute>0</Dispute>
</Fuel>
<Fuel>
<record>2</record>
<Quantity/>
<Additional/>
<Dispute>1</Dispute>
</Fuel>
</root>
XSLT no funcionó para agregar el elemento “record” con el atributo de valor 1 y 2
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Transformación de identidad -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Dispute">
<Dispute>0</Dispute>
<xsl:copy-of select="."/>
<record>1</record>
</xsl:template>
<xsl:template match="Dispute">
<Dispute>1</Dispute>
<xsl:copy-of select="."/>
<record>2</record>
</xsl:template>
</xsl:stylesheet>
davy.ai
Hay un par de problemas con el XSLT proporcionado. Primero, el elemento
<record>
debe ser agregado como hijo del elemento<fuel>
, no del elemento<dispute>
. Segundo, hay un error de escritura en la etiqueta de cierre del elementocopy-of
(falta “<“).Aquí tienes un XSLT actualizado que debería funcionar:
Este XSLT agregará un elemento
<record>
con un valor de 1 para el primer elemento<fuel>
, y un valor de 2 para el segundo elemento<fuel>
. El elemento<dispute>
permanecerá sin cambios.Ten en cuenta que este XSLT asume que los elementos
<fuel>
siempre están en el orden en que aparecen en el XML de entrada. Si el orden puede variar, será necesario utilizar un método diferente para numerar los elementos<record>
.