Thread View: fr.comp.text.xml
11 messages
11 total messages
Started by YgoogleY
Tue, 01 Dec 2009 14:36
compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Tue, 01 Dec 2009 14:36
Date: Tue, 01 Dec 2009 14:36
45 lines
2094 bytes
2094 bytes
Bonjour, j'essaie de faire une requĂȘte simple avec xpath mais j'avoue ne rien comprendre aux docs que je trouve sur le net. Mon problĂšme est le suivant : j'accĂšde Ă des fichiers XML gĂ©nĂ©rĂ©s par une application et ces fichiers sont parfois mal formĂ©s. J'obtiens un fichier XML structurĂ© comme ceci : <Dataroot> <Niv1> <Niv2> <Niv3>data x</Niv3> </Niv2> <Niv2> <Niv3>data y</Niv3> </Niv2> </Niv1> </Dataroot> au lieu d'avoir ceci : <Dataroot> <Niv1> <Niv2> <Niv3>data x</Niv3> </Niv2> </Niv1> <Niv1> <Niv2> <Niv3>data y</Niv3> </Niv2> </Niv1> </Dataroot> J'aimerai donc faire une requĂȘte qui compte le nombre de balises <Niv2> contenues par une balise <Niv1> en sachant que si ce nombre est > 1 alors je devrais faire un traitement. Merci de votre aide. Cordialement, Y.
Re: compter avec une requĂȘte Xpath
Author: Alain Ketterlin
Date: Tue, 01 Dec 2009 15:07
Date: Tue, 01 Dec 2009 15:07
40 lines
1922 bytes
1922 bytes
YgoogleY <jrmaub@gmail.com> writes: > <Dataroot> > <Niv1> > <Niv2> > <Niv3>data x</Niv3> > </Niv2> > <Niv2> > <Niv3>data y</Niv3> > </Niv2> > </Niv1> > </Dataroot> > > au lieu d'avoir ceci : > > <Dataroot> > <Niv1> > <Niv2> > <Niv3>data x</Niv3> > </Niv2> > </Niv1> > <Niv1> > <Niv2> > <Niv3>data y</Niv3> > </Niv2> > </Niv1> > </Dataroot> Je ne suis pas sĂ»r de comprendre pourquoi le second est mieux que le premier... > J'aimerai donc faire une requĂȘte qui compte le nombre de balises > <Niv2> contenues par une balise <Niv1> en sachant que si ce nombre est > > 1 alors je devrais faire un traitement. //Niv1[count(Niv2) > 1] (si tu peux Ă©viter le // c'est aussi bien). -- Alain.
Re: compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Tue, 01 Dec 2009 16:20
Date: Tue, 01 Dec 2009 16:20
26 lines
2194 bytes
2194 bytes
On 1 dĂ©c, 16:07, Alain Ketterlin <al...@dpt-info.u-strasbg.fr> wrote: > Je ne suis pas sĂ»r de comprendre pourquoi le second est mieux que le > premier... J'aurai dĂ» prĂ©ciser. Le fichier XML sert Ă migrer des donnĂ©es entre deux applications. L'application source donne comme rĂ©sultat le premier fichier et l'application destinataire attend comme rĂ©sultat le deuxiĂšme fichier. Comme je ne suis propriĂ©taire d'aucune des 2 applications, je dois agir sur le fichier XML :-( > > J'aimerai donc faire une requĂȘte qui compte le nombre de balises > > <Niv2> contenues par une balise <Niv1> en sachant que si ce nombre est > > > 1 alors je devrais faire un traitement. > > //Niv1[count(Niv2) > 1] > > (si tu peux Ă©viter le // c'est aussi bien). > > -- Alain. Merci beaucoup pour la solution. Cordialement, Y.
Re: compter avec une requĂȘte Xpath
Author: xmlizer
Date: Wed, 02 Dec 2009 06:37
Date: Wed, 02 Dec 2009 06:37
53 lines
2630 bytes
2630 bytes
On 1 dĂ©c, 15:36, YgoogleY <jrm...@gmail.com> wrote: > Bonjour, > > j'essaie de faire une requĂȘte simple avec xpath mais j'avoue ne rien > comprendre aux docs que je trouve sur le net. > > Mon problĂšme est le suivant : j'accĂšde Ă des fichiers XML gĂ©nĂ©rĂ©s par > une application et ces fichiers sont parfois mal formĂ©s. Attention : "mal formĂ©" a dĂ©jĂ un sens dans le monde XML. "<a></A>" est un document mal formĂ© par exemple car les balises ne sont pas Ă©quilibrĂ©e Peut ĂȘtre vaut il mieux utiliser "non conforme aux attentes mĂ©tiers" > J'obtiens un > fichier XML structurĂ© comme ceci : > > <Dataroot> >  <Niv1> >  <Niv2> >   <Niv3>data x</Niv3> >  </Niv2> >  <Niv2> >   <Niv3>data y</Niv3> >  </Niv2> >  </Niv1> > </Dataroot> > > au lieu d'avoir ceci : > > <Dataroot> >  <Niv1> >  <Niv2> >   <Niv3>data x</Niv3> >  </Niv2> >  </Niv1> >  <Niv1> >  <Niv2> >   <Niv3>data y</Niv3> >  </Niv2> >  </Niv1> > </Dataroot> > > J'aimerai donc faire une requĂȘte qui compte le nombre de balises > <Niv2> contenues par une balise <Niv1> en sachant que si ce nombre est > > > 1 alors je devrais faire un traitement. Pourquoi ne pas faire cette transformation en XSLT ? Xmlizer
Re: compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Wed, 02 Dec 2009 07:31
Date: Wed, 02 Dec 2009 07:31
15 lines
2041 bytes
2041 bytes
On 2 dĂ©c, 07:37, xmlizer <xmli...@gmail.com> wrote: > Peut ĂȘtre vaut il mieux utiliser "non conforme aux attentes mĂ©tiers" Merci de cette prĂ©cision. J'en prends bonne note. > > Pourquoi ne pas faire cette transformation en XSLT ? Parce que je ne connais pas xslt. Parce que je trouve que les sources d'informations sur Internet concernant XML et consort (xpath, xslt,...) sont difficiles Ă comprendre pour un non initiĂ©. J'avoue que dans le domaine informatique, c'est la premiĂšre fois que je sĂšche autant sur un(e) "technologie/standard/...". D'habitude, je m'en sort assez bien grĂące au Web mais pas lĂ . Peut -ĂȘtre que je vieilli :-)
Re: compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Wed, 02 Dec 2009 10:44
Date: Wed, 02 Dec 2009 10:44
44 lines
2343 bytes
2343 bytes
> On 2 déc, 07:37, xmlizer <xmli...@gmail.com> wrote: > > Pourquoi ne pas faire cette transformation en XSLT ? > J'ai essayé de me remettre à XSLT, notamment à l'aide du site http://www.w3schools.com/xml/default.asp J'ai compris comment re-créer un document XML grùce à XSLT mais je ne vois pas comment je peux fermer une balise comme je le souhaiterai. C'est à dire, en partant de ce document XML <Dataroot> <Niv1> <Niv2> <Niv3>data x</Niv3> </Niv2> <Niv2> <Niv3>data y</Niv3> </Niv2> </Niv1> </Dataroot> Arriver à celui-ci <Dataroot> <Niv1> <Niv2> <Niv3>data x</Niv3> </Niv2> </Niv1> <Niv1> <Niv2> <Niv3>data y</Niv3> </Niv2> </Niv1> </Dataroot> En français, à chaque fois que je vois une balise <Niv2> je veux insérer une balise juste avant </Niv1> et une balise <Niv1> ? Merci de votre aide
Re: compter avec une requĂȘte Xpath
Author: 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.
Re: compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Wed, 02 Dec 2009 13:25
Date: Wed, 02 Dec 2009 13:25
50 lines
3644 bytes
3644 bytes
On 2 dĂ©c, 13:45, Alain Ketterlin <al...@dpt-info.u-strasbg.fr> wrote: > > 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.) > -- Alain. C'est vrai qu'expliquĂ© comme cela, tout devient plus clair. Mais au risque de passer pour un gros boulet (tant pis, lĂ j'assume) et Ă mon grand Ă©tonnement cela ne semble pas fonctionner. En fait j''ouvre mon fichier XML source dans Firefox. Cela "mouline" et je vois s'afficher toutes les donnĂ©es contenus dans mon fichier XML source. Si je regarde le code source du fichier, j'obtiens toujours le mĂȘme source que mon fichier d'origine. Je me demande si j'ai bien compris tout le fonctionnement de la chose. Pour moi en mettant ceci en entĂȘte de mon fichier XSL : <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/ Transform"> <xsl:output method="xml" version="1.0" encoding="iso-8859-1" standalone="yes" indent="yes"/> ... </xsl:stylesheet> cela me permettait d'afficher mon fichier XML d'origine transformĂ© dans Firefox et ensuite enregistrer le code source transformĂ© dans un autre fichier. A dĂ©faut de pouvoir transformer le fichier d'origine Ă la volĂ©e ou Ă©ventuellement mieux de pouvoir produire en sortie directement un nouveau fichier XML conforme aux attentes mĂ©tiers. Cordialement
Re: compter avec une requĂȘte Xpath
Author: Alain Ketterlin
Date: Wed, 02 Dec 2009 14:57
Date: Wed, 02 Dec 2009 14:57
32 lines
2369 bytes
2369 bytes
YgoogleY <jrmaub@gmail.com> writes: [...] Ta feuille a l'air d'ĂȘtre correcte. > j''ouvre mon fichier XML source dans Firefox. [...] Je ne sais pas ce que peut ĂȘtre le problĂšme, je n'utilise jamais Firefox pour faire cela. Juste pour ĂȘtre sĂ»r : as-tu mis une processing-instruction <?xml-stylesheet> dans le fichier XML ? [...] > A dĂ©faut de pouvoir transformer le fichier d'origine Ă la volĂ©e ou > Ă©ventuellement mieux de pouvoir produire en sortie directement un > nouveau fichier XML conforme aux attentes mĂ©tiers. En gĂ©nĂ©ral j'utilise xsltproc, de la façon suivante (sous Linux) : xsltproc feuille.xsl fichier.xml > nouveau.xml mais il y a bien sĂ»r d'autres processeurs XSLT. Si tu nous dis ce que tu utilises comme OS, quelqu'un pourra sĂ»rement t'indiquer la marche Ă suivre. -- Alain.
Re: compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Wed, 02 Dec 2009 15:44
Date: Wed, 02 Dec 2009 15:44
25 lines
2458 bytes
2458 bytes
On 2 dĂ©c, 15:57, Alain Ketterlin <al...@dpt-info.u-strasbg.fr> wrote: [...] Juste pour ĂȘtre sĂ»r : as-tu mis une > processing-instruction <?xml-stylesheet> dans le fichier XML ? Oui > En gĂ©nĂ©ral j'utilise xsltproc, de la façon suivante (sous Linux) : > > xsltproc feuille.xsl fichier.xml > nouveau.xml > > mais il y a bien sĂ»r d'autres processeurs XSLT. Si tu nous dis ce que tu > utilises comme OS, quelqu'un pourra sĂ»rement t'indiquer la marche Ă > suivre. Je travaille sur Windows XP Pro mais j'ai une station linux perso, je vais donc pouvoir faire un test avec xsltproc. Et je vais faire des recherches sur un processeur xslt pour windows. Je tiens au courant de mes recherches, en tout cas, merci encore pour votre aide prĂ©cieuse. Cordialement, Y.
Re: compter avec une requĂȘte Xpath
Author: YgoogleY
Date: Wed, 02 Dec 2009 15:52
Date: Wed, 02 Dec 2009 15:52
13 lines
1933 bytes
1933 bytes
Petit compte-rendu : j'ai trouvé msxsl qui est un processeur xslt pour windows et grùce à votre code xsl (@Alain Ketterlin) j'ai un fichier tout beau tout neuf en une seconde Je suis bluffé, c'est vraiment super puissant. Encore merci Cordialement, Y.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads