Article View: fr.comp.text.xml
Article #135Re: compter avec une requête Xpath
From: Alain Ketterlin
Date: Wed, 02 Dec 2009 12:45
Date: Wed, 02 Dec 2009 12:45
56 lines
3293 bytes
3293 bytes
YgoogleY <jrmaub@gmail.com> writes:
> J'ai essayé de me remettre à XSLT, notamment à l'aide du site
> http://www.w3schools.com/xml/default.asp
Personnellement, je ne connais rien de mieux que les recommandations
XPath et XSLT du W3C.
> En français, à chaque fois que je vois une balise <Niv2> je veux
> insérer une balise juste avant </Niv1> et une balise <Niv1> ?
Excuse moi d'être un peu brutal, mais c'est exactement comme cela qu'il
ne faut pas réfléchir. Tout devient plus simple si tu formules les
choses de la façon suivante :
chaque fois que j'ai un élément Niv1,
s'il contient un seul Niv2,
il suffit de reémettre ce Niv1 tel quel,
et sinon,
pour chacun des Niv2 qu'il contient
émettre ce Niv2 "entouré" d'un Niv1
XSLT s'inspire des langages fonctionnels : on n'insère ou supprime rien,
on crée le résultat à partir des données. (Et surtout, on n'insère pas
des balises, qui ne sont que des artefacts syntaxiques -- autrement dit,
on raisonne en termes d'éléments, pas en termes de balises.)
Pour ton problème, voici une esquisse :
<xsl:template match="Dataroot">
<xsl:copy>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Niv1">
<xsl:choose>
<xsl:when test="count(Niv2)=1">
<xsl:copy-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="Niv2">
<Niv1>
<xsl:copy-of select="."/>
</Niv1>
</xsl:for-each>
</xslotherwise>
</xsl:choose>
</xsl:template>
(Fait de tête, et évidemment non testé.)
-- Alain.
Technical Details
Message-ID:
<877ht54k8y.fsf@dpt-info.u-strasbg.fr>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!border1.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!news.mixmin.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!ircam.fr!freenix!jussieu.fr!not-for-mailReferences:
<5c0a53db-c629-4c3a-affe-bd2fd90b0ff6@k19g2000yqc.googlegroups.com> <255ac929-0e14-41f1-959c-b7c27fd27350@k17g2000yqh.googlegroups.com> <0bf1b4ce-958b-4080-b168-6612c7181c38@p8g2000yqb.googlegroups.com> <eae16e75-c0ae-4065-8f51-a13ebe2df86b@a21g2000yqc.googlegroups.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 8a75585569,e549ae3bf9b5c171 X-Google-Attributes: gid8a75585569,public,usenet X-Google-NewGroupId: yes X-Google-Language: FRENCH,UTF8 Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!border1.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!news.mixmin.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!ircam.fr!freenix!jussieu.fr!not-for-mail From: Alain Ketterlin <alain@dpt-info.u-strasbg.fr> Newsgroups: fr.comp.text.xml Subject: Re: compter avec une requête Xpath Date: Wed, 02 Dec 2009 13:45:49 +0100 Organization: Universites Paris VI/Paris VII - France Lines: 56 Message-ID: <877ht54k8y.fsf@dpt-info.u-strasbg.fr> References: <5c0a53db-c629-4c3a-affe-bd2fd90b0ff6@k19g2000yqc.googlegroups.com> <255ac929-0e14-41f1-959c-b7c27fd27350@k17g2000yqh.googlegroups.com> <0bf1b4ce-958b-4080-b168-6612c7181c38@p8g2000yqb.googlegroups.com> <eae16e75-c0ae-4065-8f51-a13ebe2df86b@a21g2000yqc.googlegroups.com> NNTP-Posting-Host: icps-laptop-ketterlin.u-strasbg.fr Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: vishnu.jussieu.fr 1259757949 71483 130.79.192.170 (2 Dec 2009 12:45:49 GMT) X-Complaints-To: usenet@vishnu.jussieu.fr NNTP-Posting-Date: Wed, 2 Dec 2009 12:45:49 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.91 (gnu/linux) Cancel-Lock: sha1:Fp3fxl1ZtugFzpICusMz3ECkcMs= X-Original-Bytes: 3104