Le problème est que ma sortie a l'élément deux fois:
<?xml version="1.0"?>
<Config>
<Enabled>false</Enabled>
<Interval><Interval>77</Interval></Interval>
</Config>
Pas vrai!
La sortie lorsque cette transformation est appliquée sur le document XML fourni est:
<Config>
<Enabled>false</Enabled>
<PollingInterval><Interval>77</Interval></PollingInterval>
</Config>
Si vous voulez vous débarrasser de l'un élément, il suffit de retirer la <xsl:element>
instruction correspondante.
Par exemple: La suppression <xsl:element name="PollingInterval">
la transformation devient:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Config/Interval">
<xsl:element name="Interval">77</xsl:element>
</xsl:template>
</xsl:stylesheet>
et le résultat de l'application sur le document XML fourni est:
<Config>
<Enabled>false</Enabled>
<Interval>77</Interval>
</Config>
Je recommande de simplifier la transformation supplémentaire et de faire correspondre sur le nœud de texte enfant de Interval
.Ceci est peut-être la plus courte et la solution la plus simple:
<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()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Interval/text()">
<xsl:text>77</xsl:text>
</xsl:template>
</xsl:stylesheet>
lorsqu'il est appliqué sur le document XML fourni:
<Config>
<Enabled>false</Enabled>
<Interval>5</Interval>
</Config>
le résultat recherché est produit:
<Config>
<Enabled>false</Enabled>
<Interval>77</Interval>
</Config>
En Si vous avez beaucoup d'éléments Interval
et que vous voulez eul pour remplacer la valeur par 5
77
alors le seul modèle à l'exception de la règle d'identité devrait être:
<xsl:template match="Interval/text()[.=5]">
<xsl:text>77</xsl:text>
</xsl:template>
Bonne question (1). Voir ma réponse pour une explication du problème et une solution complète et simple. –