🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: compter avec une requête Xpath

#135
From: Alain Ketterlin
Date: Wed, 02 Dec 2009 12:45
56 lines
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-mail
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>

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