🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.text.xml
Article #8881

Re: [XSLT] modifier juste un attribut et laisser le reste intact

#8881
From: Thomas Broyer
Date: Sat, 11 Aug 2001 03:24
67 lines
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-mail
References: <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