Aquí es una hoja de estilo XSLT 1.0 que va a hacer lo que pidió:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Name">
<xsl:copy-of select="."/>
<Age>34</Age>
</xsl:template>
<xsl:template match="Dept">
<xsl:copy-of select="."/>
<Domain>Insurance</Domain>
</xsl:template>
</xsl:stylesheet>
Obviamente la lógica variará dependiendo de dónde se va a obtener los nuevos datos de, y donde tiene que ir. La hoja de estilo anterior simplemente inserta un elemento <Age>
después de cada elemento <Name>
y un elemento <Domain>
después de cada elemento <Dept>
.
(Limitación:. Si el documento podría tener <Name>
o <Dept>
elementos dentro de otros <Name>
o <Dept>
elementos, sólo los más exteriores tendrán este proceso especial no creo que la intención para que el documento tiene este tipo de estructura recursiva , por lo que no lo afectaría, pero vale la pena mencionarlo por las dudas).
¿Qué pasa si sólo desea que el elemento que se añade una vez, en lugar de una vez por cada elementos Nombre/Dept? – Joe
@Joe: Wow, casi 5 años después. :-) En ese caso, agrega el elemento de resultado en una plantilla que solo coincidirá una vez. P.ej. 'match ="/*/Nombre [1] "'. – LarsH
Excelente, realmente no esperaba una respuesta 5 años después, mucho menos una tan pronto! Eso ayuda mucho – Joe