Niouzes.org  

Précédent   Niouzes.org > Forum > Newsgroup fr.comp.* Forum > Newsgroup fr.comp.text.xml
S'inscrire FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus



Réponse

 

LinkBack Outils de la discussion Modes d'affichage
  #1 (permalink)  
Vieux 28/11/2007, 16h45
Nicolas M
 
Messages: n/a
Par défaut Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Niouzes.org
Standard Sponsored Links

  #2 (permalink)  
Vieux 28/11/2007, 17h56
Peyo
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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.
Réponse avec citation
  #3 (permalink)  
Vieux 28/11/2007, 17h56
Peyo
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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.
Réponse avec citation
  #4 (permalink)  
Vieux 29/11/2007, 08h02
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #5 (permalink)  
Vieux 29/11/2007, 08h02
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #6 (permalink)  
Vieux 29/11/2007, 08h08
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #7 (permalink)  
Vieux 29/11/2007, 08h08
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #8 (permalink)  
Vieux 29/11/2007, 13h08
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #9 (permalink)  
Vieux 29/11/2007, 13h08
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #10 (permalink)  
Vieux 30/11/2007, 09h18
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
  #11 (permalink)  
Vieux 30/11/2007, 09h18
Nicolas M
 
Messages: n/a
Par défaut Re: Comment calculer ceci avec xsl/xpath

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
Réponse avec citation
 
Réponse
Tags: , , ,



Outils de la discussion
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Discussions similaires

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


Fuseau horaire GMT. Il est actuellement 23h30.

Italiano - German - English - Español


Édité par : vBulletin® version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc. Tous droits réservés.
Version française #13 par l'association vBulletin francophone


Politique - Droit - Philosophie - Football - Medicine - Française - Bricolage - Photo - Mac Os X - Divers - Physique - Jardinage
Mecanique - Moto - Photographie - Rail - Route - Aviation - Cinema - Linux - Psychanalyse - Finance - Enigmes - Rugby
Environnement - Histoire - Programmes TV - Education - Travail - Voyages - Windows - Immobilier - Cuisine
Windows XP - Excel - Word - Outlook - Access - Internet Explorer - Office - Vista

Page generated in 0,41864 seconds with 11 queries