![]() |
| |||||||
| S'inscrire | FAQ | Membres | Calendrier | Recherche | Messages du jour | Marquer les forums comme lus |
![]() |
| LinkBack | Outils de la discussion | Modes d'affichage |
| |||
| Bonjour, je suis confronté à un probleme qui me dépasse, j'ai un champ truc="un deux trois quatre" et je voudrai trouver une expression xpath qui calcule le nombre de mot de mon attribut, je n'ai pas trouvé dans la spec de fonction qui calcule le nombre d'occurences d'un caractère (sinon je pensais calculer le nombre d'espaces+1), Autre difficulté notable qui rend plus difficile la méthode de comptage des espaces, c'est que l'attribut peut contenir des espaces échappés ("un joli\ mot doux" ne contient que trois mots : "un", "joli mot", "doux") la seule chose que mon esprit tordu a pondu, c'est quelque chose d'approchant, mais qui ne compile pas sous JAXP : string-length(replace(replace(normalize-space(***truc),'\\\s ',''),'\S*',''))" en gros, je normalize pour n'avoir que les espaces intéressants, je supprime les "\ ", je supprime tout ce qui ,n'est pas un espace, et je compte la chaine (et puis je rajouterai 1), il y a tellement d'inconnues que je ne sais pas pourquoi ça ne compile pas, je ne sais même pas si ce que je cherche à faire est possible ... Merci d'avance pour les coups de mains ! Nicolas |
| | ||||
| ||||
| |
| |||
| Nicolas M a écrit : > j'ai un champ truc="un deux trois quatre" un attribut dont la valeur est égale à "un deux trois quatre" > la seule chose que mon esprit tordu a pondu, c'est quelque chose > d'approchant, mais qui ne compile pas sous JAXP : Etant donné que c'est du XPath 2.0, c'est bien possible ! Peu d'outil(s) supportant cette spec... > string-length(replace(replace(normalize-space(***truc),'\\\s > ',''),'\S*',''))" L'idée est bonne, mais pourquoi ne pas aller voir du côté de tokenize() qui est là pour ça ? En XSLT 1.0, un template nommé qui s'appelle récursivement en passant substring-after() dans le paramètre et qui retourne le nombre d'iterations lors du dernier appel devrait pouvoir le faire. p. |
| |||
| Nicolas M a écrit : > j'ai un champ truc="un deux trois quatre" un attribut dont la valeur est égale à "un deux trois quatre" > la seule chose que mon esprit tordu a pondu, c'est quelque chose > d'approchant, mais qui ne compile pas sous JAXP : Etant donné que c'est du XPath 2.0, c'est bien possible ! Peu d'outil(s) supportant cette spec... > string-length(replace(replace(normalize-space(***truc),'\\\s > ',''),'\S*',''))" L'idée est bonne, mais pourquoi ne pas aller voir du côté de tokenize() qui est là pour ça ? En XSLT 1.0, un template nommé qui s'appelle récursivement en passant substring-after() dans le paramètre et qui retourne le nombre d'iterations lors du dernier appel devrait pouvoir le faire. p. |
| |||
| Peyo a écrit : > L'idée est bonne, mais pourquoi ne pas aller voir du côté de tokenize() > qui est là pour ça ? Ah parce que je ne connaissais pas, tout simplement ![]() Donc comme ça ça marche bien : count(tokenize(replace(normalize-space(***labelSignature),'\\\s',''),'\s+')) avec le processeur java SAXON qui gère XPATH 2.0 Merci Nicolas |
| |||
| Peyo a écrit : > L'idée est bonne, mais pourquoi ne pas aller voir du côté de tokenize() > qui est là pour ça ? Ah parce que je ne connaissais pas, tout simplement ![]() Donc comme ça ça marche bien : count(tokenize(replace(normalize-space(***labelSignature),'\\\s',''),'\s+')) avec le processeur java SAXON qui gère XPATH 2.0 Merci Nicolas |
| |||
| Nicolas M a écrit : Par contre maitnenant j'ai un autre problème, je voudrais pouvoir utiliser chaque élément de tokenize(replace(normalize-space(***labelSignature),'\\\s',''),'\s+') dans une boucle mais je ne sais pas comment c'est possible (passage par une variable ? mais comment l'actualiser ?) Merci d'avance Nicolas |
| |||
| Nicolas M a écrit : Par contre maitnenant j'ai un autre problème, je voudrais pouvoir utiliser chaque élément de tokenize(replace(normalize-space(***labelSignature),'\\\s',''),'\s+') dans une boucle mais je ne sais pas comment c'est possible (passage par une variable ? mais comment l'actualiser ?) Merci d'avance Nicolas |
| |||
| Nicolas M a écrit : > Nicolas M a écrit : > > Par contre maitnenant j'ai un autre problème, je voudrais pouvoir > utiliser chaque élément de > tokenize(replace(normalize-space(***labelSignature),'\\\s',''),'\s+') > dans une boucle Bon en fait il suffisait d'utiliser un foreach, et la valeur du token c'est "." Par contre maintenant j'ai un autre problème, je cherche la valeur d'un attribut d'un élément qui a un attribut de la valeur de mon token, or SAXON ne veut pas que je fasse de select car je suis sur une valeur atomic et non un noeud : <xsl:for-each select="tokenize(my_string)"> <xsl:variable name="label" select="."/> <xsl:variable name="id" select="//mynode[***label=$label]/***id"/> <xsl:value-of select="$id"/> </xsl:for-each> "Cannot select a node here: the context item is an atomic value" Des idées ? Merci d'avance, Nicolas |
| |||
| Nicolas M a écrit : > Nicolas M a écrit : > > Par contre maitnenant j'ai un autre problème, je voudrais pouvoir > utiliser chaque élément de > tokenize(replace(normalize-space(***labelSignature),'\\\s',''),'\s+') > dans une boucle Bon en fait il suffisait d'utiliser un foreach, et la valeur du token c'est "." Par contre maintenant j'ai un autre problème, je cherche la valeur d'un attribut d'un élément qui a un attribut de la valeur de mon token, or SAXON ne veut pas que je fasse de select car je suis sur une valeur atomic et non un noeud : <xsl:for-each select="tokenize(my_string)"> <xsl:variable name="label" select="."/> <xsl:variable name="id" select="//mynode[***label=$label]/***id"/> <xsl:value-of select="$id"/> </xsl:for-each> "Cannot select a node here: the context item is an atomic value" Des idées ? Merci d'avance, Nicolas |
| |||
| Nicolas M a écrit : > <xsl:for-each select="tokenize(my_string)"> > <xsl:variable name="label" select="."/> > <xsl:variable name="id" select="//mynode[***label=$label]/***id"/> > <xsl:value-of select="$id"/> > </xsl:for-each> > > > "Cannot select a node here: the context item is an atomic value" J'ai eu la réponse sur le ng anglophone : yes paths starting with // are still relative Xpaths they mean select from the current document, which means outermost ancestor of teh current node, but in a context where there is no current node, they error. you want <xs:variable name="root" select="/"/> <xsl:for-each select="tokenize(...)"> select="$root//mynode[. Nicolas |
| |||
| Nicolas M a écrit : > <xsl:for-each select="tokenize(my_string)"> > <xsl:variable name="label" select="."/> > <xsl:variable name="id" select="//mynode[***label=$label]/***id"/> > <xsl:value-of select="$id"/> > </xsl:for-each> > > > "Cannot select a node here: the context item is an atomic value" J'ai eu la réponse sur le ng anglophone : yes paths starting with // are still relative Xpaths they mean select from the current document, which means outermost ancestor of teh current node, but in a context where there is no current node, they error. you want <xs:variable name="root" select="/"/> <xsl:for-each select="tokenize(...)"> select="$root//mynode[. Nicolas |
| |
| |
![]() |
| Tags: calculer, ceci, comment, xslxpath |
| Outils de la discussion | |
| Modes d'affichage | |
| |
| ||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| Comment calculer des integrales? | dreverdy@hotmail.com | Newsgroup microsoft.public.fr.excel | 3 | 17/04/2008 15h08 |
| Re: Comment calculer rayon ellipse ??? | lofredi pierre-dominique | Newsgroup fr.sci.maths | 0 | 17/03/2008 10h44 |
| Comment calculer les proportions ?... | ADM | Newsgroup fr.rec.cuisine | 10 | 11/02/2008 20h13 |
| RE: Comment calculer superficie plan | Vincent Isoz | Newsgroup microsoft.public.fr.visio | 0 | 01/05/2007 19h02 |
| Re: Xpath et DTD avec dom4j | drkm | Newsgroup fr.comp.text.xml | 4 | 01/12/2005 13h20 |