From: Sir Pendenaor (pendenaor@hotmail.com)
Date: 05/07/2004 - 14:01
>
>
>Bonjour,
>
>On Mon, 2004-07-05 at 14:19, Sir Pendenaor wrote:
> > bonjour,
> >
> > j'ai un document XML du style:
> >
> > <doc><body>
> > <bmk id='1' type='start'/>
> > <r><fld type='begin'/>du texte</r>
> > <r><fld type='middle'/>du texte</r>
> > <r><fld type='end'/>du texte</r>
> > <bmk id='1' type='end'/>
> > <r><fld type='begin'/>du texte</r>
> > <bmk id='2' type='start'/>
> > <r><fld type='middle'/>du texte</r>
> > <bmk id='2' type='end'/>
> > <r><fld type='end'/>du texte</r>
> > </body></doc>
> >
> > je voudrais une requête XPath qui récupère tout les noeuds entre
> > <fld type='begin'/> et <fld type='end'/> inclus dont <fld type='middle'>
> > est lui-même compris entre <bmk type='start'/> et <bmk type='end'/>
> > pour un id donné (ouf !) ?
> >
> > Malgré mes recherches et mes essais, impossible de 'pondre' une requête
> > qui marche pour l'id 1 et aussi pour l'id 2 ... :(
>
>On entre effectivement ici dans des domaines sur lesquels XPath n'est
>pas vraiment optimal...
ça commence mal ... :(
> >
> > Quelqu'un pourrait-il m'aider ?
>
>Ce qui me trouble dans votre demande (si je l'ai bien comprise), c'est
>que le résultat ne serait pas du XML bien formé puisqu'il inclurait une
>balise de fin </r> sans balise de début <r> :
>
><fld type='begin'/>du texte</r>
><r><fld type='middle'/>du texte</r>
><r><fld type='end'/>
euh ? vous êtes sur ? le xml que j'ai fourni semble convenir au parser
IE6...
<r><fld type='begin'/>du texte</r>
<r><fld type='middle'/>du texte</r>
<r><fld type='end'/>du texte</r>
chaque ligne commence par <r> et finit par </r> ...
>
>
>Dans la mesure où c'est effectivement le cas, ce n'est donc pas quelque
>chose que vous pourrez formuler avec XPath. Vous pourrez tout au plus
>(et non sans contorsions) récupérer :
>
><r><fld type='begin'/>du texte</r>
><r><fld type='middle'/>du texte</r>
><r><fld type='end'/>du texte</r>
>
>Une requête telle que :
>
>/doc/body/bmk[@id=$id and
>@type='start']/following-sibling::r[fld[@type='begin']][1]/following-sibling::*[count(preceding-sibling::bmk)=count(/doc/body/bmk[@id=$id
>and @type='start']/preceding-sibling::bmk)+1]
>
>devrait fonctionner.
>
>Si elle ne retourne rien pour id=2, c'est qu'il n'y a pas de <fld
>type='begin'/> après <bmk id='2' type='start'/>.
>
>Est-ce là encore réellement ce que vous souhaitez et si oui, pouvez vous
>formaliser en français les conditions entre éléments fld et bmk?
ok, en fait l'opération peut se decomposer en 3:
1. trouver un <fld type='middle'> situé entre 2 <bmk> de même @id (le 1er
ayant @type='start' et le dernier @type='end').
2. à partir de ce <fld>, trouver 2 <fld>: le <fld> précédent avec
@type='begin' et le suivant
avec @type='end'.
3. retourner l'ensemble des noeuds contenus entre ces 2 <fld> trouvés.
>
>Cordialement,
>
>Eric van der Vlist
c'est moi qui vous remercie... :)
Stéphane
_________________________________________________________________
MSN Actions Solidaires : http://www.msn.fr/actionssolidaires/ la
solidarité à portée de click
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 30/07/2004 - 13:32 UTC
webmaster@xmlfr.org
|