Article View: fr.comp.text.xml
Article #8881Re: [XSLT] modifier juste un attribut et laisser le reste intact
From: Thomas Broyer
Date: Sat, 11 Aug 2001 03:24
Date: Sat, 11 Aug 2001 03:24
67 lines
3024 bytes
3024 bytes
In <1exycgv.9gwme91dtoka2N%manu@netbsd.org>, Emmanuel Dreyfus wrote:
> <a>
> <b attrib="gnagnagna bidule:toto blablabla" />
> <c>pimpampoum</c>
> </a>
>
> But du jeu: lorsque c contient 'pimpampoum', je veux remplacer
> 'bidule:toto' par 'bidule:tata', tout le reste du document restant
> inchang�.
En reformulant : recopier chaque noeud. Lors de la recopie de @attrib, si
c='pimpampoum' alors changer la valeur.
<!-- r�gle "de base" -->
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
<!-- r�gle "sp�cialis�e" -->
<xsl:template match="@attrib">
<xsl:choose>
<xsl:when test="../../c='pimpampoum'">
<xsl:attribute name="attrib">
<!-- ici, modifier la valeur -->
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:copy/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
> Questions, donc:
> 1) Avec ca:
> <xsl:template match="/">
> <xsl:copy-of select="node()|@*"/>
> <xsl:apply-templates/>
> </xsl:template>
>
> Je recopie effectivement tout le document original, mais en plus il me
> recopie les contenus des balises � la fin. Comment neutraliser cette
> regle de traitement par defaud?
Supprime xsl:apply-templates
> 2) Comment introduire la dedans que si //a[c='pimpampum'] alors
> ../b@attrib doit etre modifi�?
xsl:copy-of n'est alors pas adapt�, il faut une r�gle "identit�" (cf.
ci-dessus, c'est l'exemple de la spec XSLT) et une r�gle plus sp�cialis�e
pour les parties � modifier.
> 3) Comment fais-je un rechercher/remplacer ma chaine dans l'attribut
> attrb, une fois que je l'ai coinc� dans un coin?
� l'aide des fonctions XPath substring-before(), substring-after() et
concat().
> 4) Ce travail ne serait il pas plus "naturel" � accomplir avec un outil
> comme xerces-perl, qui permet de manipuler le document XML avec une
> interface DOM?
C'est bien possible.
Tom.
Technical Details
Message-ID:
<3737983.xmLvFx2qVV@ltgt.net>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!wanadoo.fr!proxad.net!feeder2-1.proxad.net!nnrp3.proxad.net.POSTED!not-for-mailReferences:
<1exycgv.9gwme91dtoka2N%manu@netbsd.org>Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII X-Google-Thread: 114f60,c6bfcc54f553e8f2 X-Google-Attributes: gid114f60,public X-Google-ArrivalTime: 2001-08-10 20:24:55 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!wanadoo.fr!proxad.net!feeder2-1.proxad.net!nnrp3.proxad.net.POSTED!not-for-mail Message-ID: <3737983.xmLvFx2qVV@ltgt.net> From: Thomas Broyer <ptittom+news@free.fr> Subject: Re: [XSLT] modifier juste un attribut et laisser le reste intact Newsgroups: fr.comp.text.xml References: <1exycgv.9gwme91dtoka2N%manu@netbsd.org> Lines: 67 Organization: </> User-Agent: KNode/0.5.6 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8Bit Date: Sat, 11 Aug 2001 03:24:54 GMT NNTP-Posting-Host: 193.252.183.228 X-Complaints-To: abuse@proxad.net X-Trace: nnrp3.proxad.net 997500294 193.252.183.228 (Sat, 11 Aug 2001 05:24:54 CEST) NNTP-Posting-Date: Sat, 11 Aug 2001 05:24:54 CEST