Esta transformación:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="name">
<brlName><xsl:apply-templates select="node()|@*"/></brlName>
</xsl:template>
<xsl:template match="/*/*[last()]">
<xsl:call-template name="identity"/>
<drlName>86_1.0</drlName>
</xsl:template>
</xsl:stylesheet>
cuando se aplica en el documento XML proporcionado:
<rule>
<name>86</name>
<ruleId>100</ruleId>
<ruleVersion>1.0</ruleVersion>
<brlVersion>1.0</brlVersion>
</rule>
produce el, resultado deseado correcta:
<rule>
<brlName>86</brlName>
<ruleId>100</ruleId>
<ruleVersion>1.0</ruleVersion>
<brlVersion>1.0</brlVersion>
<drlName>86_1.0</drlName>
</rule>
Explicación:
Uso y anulando la regla de identidad/plantilla - el XSLT más fundamental y de gran alcance patrón de diseño.
Anula cualquier elemento denominado name
y crea un elemento denominado brlName
(cambiar el nombre).
Anula el último elemento secundario del elemento superior. Llamar a la regla de identidad por nombre para este nodo (copiar) y luego crear un elemento denominado drlName
con un hijo de nodo de texto específico según los requisitos.
Uso y anulando la regla de identidad/plantilla es el patrón más fundamental y poderoso diseño XSLT. Puede obtener más información al respecto here.
Buena pregunta, +1. Vea mi respuesta para una solución completa, breve y fácil que se basa en el patrón de diseño XSLT más fundamental y poderoso: utilizar y anular la regla/plantilla de identidad. –
¿Por qué algunas personas hacen preguntas y, después de recibir, déjenme decir, buenas respuestas, no proporcionan ningún comentario? Esto es muy irritante en algún momento. –
Bienvenido a Stack Overflow, empo. – Flynn1179