Ce problème a une solution classique : Utilisation et remplacement le site modèle d'identité est l'un des modèles de conception XSLT les plus fondamentaux et les plus puissants. :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pNewType" select="'myNewType'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="property/@type">
<xsl:attribute name="type">
<xsl:value-of select="$pNewType"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Lorsqu'il est appliqué à ce document XML :
<t>
<property>value1</property>
<property type="old">value2</property>
</t>
le résultat souhaité est produit :
<t>
<property>value1</property>
<property type="myNewType">value2</property>
</t>
1 votes
Pour ceux qui veulent une solution générale : <xsl:stylesheet xmlns:xsl=" w3.org/1999/XSL/Transformer " version="1. 0"> <xsl:template match="node()[local-name()='property']/@*[local-name()='type']"> <xsl:attribute name="{name()}" namespace="{namespace-uri()}">une nouvelle valeur ici </xsl:attribute> <xsl:template> <xsl : template match="@*|node()|comment()|processing-instruction()|text()"> <xsl:copy> <xsl:apply-templates select="@*|node()|comment()|processing-instruction()|text()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
2 votes
Votre solution est inutilement verbeuse, et partiellement fausse. Il devrait y avoir '
http://www.
au début de la pagexsl
espace de noms. De même, la correspondance/sélection denode()|comment()|processing-instruction()|text()
est superflu, puisque les commentaires, les instructions de traitement et les nœuds de texte sont appariés parnode()
.0 votes
@Flynn1179 Ma solution fonctionne bien pour toutes les situations. Je ne sais pas pourquoi http:// est manquant après le copier/coller, c'est une erreur, merci de l'avoir signalé. J'ai juste donné une solution possible, pas la solution parfaite. La chose la plus importante est que ma solution fonctionne pour presque toutes les situations bien que "ce soit superflu" comme vous l'avez dit. D'un autre côté, la plupart des autres réponses, y compris celle de "l'expert xslt", ne fonctionnent pas du tout. Mais ils ne l'ont pas admis.