Eliminer les doublons (résolu)

Eliminer les doublons (résolu) - XML/XSL - Programmation

Marsh Posté le 19-01-2017 à 15:53:55    

Bonjour,
 
j'ai cet xml :

Code :
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <?xml-stylesheet href="mondeuxieme.xsl" type="text/xsl"?>
  3. <refs>
  4.  <cat1>
  5.   <name>toto</name>
  6.  </cat1>
  7.  <cat1>
  8.   <name>tata</name>
  9.  </cat1>
  10.  <cat2>
  11.   <name>tutu</name>
  12.  </cat2>
  13.  <cat2>
  14.   <name>toto</name>
  15.  </cat2>
  16. </refs>


 
et le XSL suivant
 

Code :
  1. <xsl:variable name="namePath" select="//name" />
  2. <xsl:for-each select="$namePath">
  3.     <xsl:variable name="a" select="position()"/>
  4.     <p><xsl:value-of select="$namePath[$a]"></xsl:value-of></p>
  5. </xsl:for-each>


 
J'obtiens donc :  

Code :
  1. <p>toto</p>
  2. <p>tata </p>
  3. <p>tutu</p>
  4. <p>toto</p>


 
J'aimerais pouvoir n'afficher que :

Code :
  1. <p>toto </p>
  2. <p>tata </p>
  3. <p>tutu</p>


 
j'ai tester pas mal de truc, preceding::, j'ai essayé la méthode Muenchian, mais je n'ai pas réussi.  
 
Merci d'avance pour votre aide  :)


Message édité par llyudy le 20-01-2017 à 10:07:21
Reply

Marsh Posté le 19-01-2017 à 15:53:55   

Reply

Marsh Posté le 19-01-2017 à 22:36:44    

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet  
  3.  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4.  version="2.0">
  5.  
  6.  <xsl:output method="xml" indent="yes"/>
  7.  
  8.  <xsl:template match="/">
  9.    <xsl:for-each select="distinct-values(//name)">
  10.      <p><xsl:value-of select="."/></p>
  11.    </xsl:for-each>
  12.  </xsl:template>
  13.  
  14. </xsl:stylesheet>


Bref, pourquoi se creuser les méninges, alors qu'il y a déjà une fonction xpath pour cela ;)
A+,


Message édité par gilou le 19-01-2017 à 22:41:41

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-01-2017 à 09:43:33    

Ah oui en effet ... x). Merci beaucoup ! :)

Reply

Marsh Posté le 20-01-2017 à 21:05:48    

Et au cas ou tu veux une liste triée:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet  
  3.  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4.  version="2.0">
  5.  
  6.  <xsl:output method="xml" indent="yes"/>
  7.  
  8.  <xsl:template match="/">
  9.    <xsl:for-each select="distinct-values(//name)">
  10.      <xsl:sort select="."/>
  11.        <p><xsl:value-of select="."/></p>
  12.    </xsl:for-each>
  13.  </xsl:template>
  14.  
  15. </xsl:stylesheet>


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 23-01-2017 à 11:13:39    

Merci c'est super sympa :)

Reply

Sujets relatifs:

Leave a Replay

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