probleme avec la fonction contains()

probleme avec la fonction contains() - XML/XSL - Programmation

Marsh Posté le 26-08-2005 à 17:15:42    

Bonjour a tous,
Voila je suis confontré à un problème XPath. Dans mon fichier xsl je fais la selection suivante:
 
Policy[contains(Borrower/FirstName,’myFirstName’)] or je fais une erreur quelque part mais je n’arrive pas a trouver la solution.
 
Le problème est que cette selection se fait seulement sur mon 1er noeud ‘Borrower’ et pas sur les suivants.  
 
Ce qui veut dire que si mon premier noeud ‘Borrower’ a un noeud ‘FirstName’
egal a ‘myFirstName’ alors je vais récupérer un résultat mais si la valeur rechercher se trouve dans un noeud ‘Borrower’ suivants alors je ne récupère rien…
 
 Ce qui me semble étrange est que si je remplace la function contains par un simple ‘=’ alors le xsl me parcourt tous les noeuds ‘Borrower’, quelle est l’explication logique?
 
L’un de vous aurait-il une solution à une erreur de ma part.?
 
Merci d’avance

Reply

Marsh Posté le 26-08-2005 à 17:15:42   

Reply

Marsh Posté le 29-08-2005 à 10:31:23    

Probablement encore une victime du pull-style...  
 
Difficile de répondre sans un exemple concrèt de se que tu veux réaliser ( xml, xsl réduit à leurs plus simple expression ET résultat escompté), je pense pas que la fonction contains() est faite pour être utilisé de la sorte...  
 
pourquoi pas faire qq chose de ce genre?  

   
    ...
    <xsl:apply-templates select="//Policy"/>
    ...
 
  <xsl:template match="Policy">
     <xsl:if test="contains(Borrower/FirstName,’myFirstName’)">
       ...
     </xsl:if>
  </xsl:template>


Message édité par avander le 29-08-2005 à 10:33:17
Reply

Marsh Posté le 29-08-2005 à 11:00:28    

merci pour ton aide mais entre temps j'avais trouve reponse a mon probleme.
 
Merci bien

Reply

Marsh Posté le 29-08-2005 à 11:59:51    

Dans ce cas je pense que ça pourrait intéresser du monde...

Reply

Marsh Posté le 29-08-2005 à 12:02:13    

Oui desole voici donc la reponse trouvee sur une mailing-list:
 
L'explication est simple :
 
La fonction xpath "contains" prend comme arguments deux parametres de type string, votre processeur commence doc par convertir la valeur Borrower/FirstName (de type node-set) en type string, pour cela, le processeur prend la valeur textuelle du premier noeud dans l'ordre préfixe des noeuds du document ce qui estplique que votre test ne réussisse que dans le cas ou c'est le premier element qui contient la sous-chaine.
 
(c.f. fonction string de la spec :
"A node-set is converted to a string by returning the string-value <http://www.w3.org/TR/xpath#dt-string-value> of the node in the node-set that is first in document order <http://www.w3.org/TR/xpath#dt-document-order>. " )
 
La solution est donc:
Policy[Borrower/FirstName[contains(.,'myFirstName')]]
 
Bonne continuation

Reply

Marsh Posté le 30-08-2005 à 10:09:57    

:jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed