2 votes

Comment générer une liste séparée par des virgules avec XSLT ?

J'essaie d'importer un XML avec un XSLT dans ms access pour qu'il importe avec la liste séparée par des virgules.
Mon XML :

<entry>
    <title>Adobe</title>
    <description>Adobe Acrobat</description>
    <title>Adobe1</title>
    <description>Adobe Acrobat1</description>
    <title>Adobe2</title>
    <description>Adobe Acrobat2</description>
</entry>

Ma tentative :

<xsl:for-each select="entry">
    <xsl:if test="position() > 1">, </xsl:if>
    <xsl:value-of select="title"/>
</xsl:for-each>

Résultats escomptés : Adobe, Adobe1, Adobe2

4voto

Tim C Points 25946

Votre XML n'a qu'un seul entry Ainsi, le code dans la section xsl:for-each ne sera exécuté qu'une seule fois. Et en faisant <xsl:value-of select="title" /> ne sélectionnera que le premier title dans ce cadre entry (En supposant que XSLT 1.0, c'est-à-dire)

Changez-le en ceci...

<xsl:for-each select="entry/title">
    <xsl:if test="position() > 1">, </xsl:if>
    <xsl:value-of select="."/>
</xsl:for-each>

Notez que dans XSTL 2.0, vous pourriez remplacer entièrement le bout de code ci-dessus par ceci...

 <xsl:value-of select="entry/title" separator="," />

EDIT : Supposons que votre XSLT ressemble à ceci...

<iavmNotice xmlns="http://stuff.com" noticeId="138643">
   <title>Cisco Vulnerability</title>
   <techOverview>
      <entry>
         <title>2012-2490</title>
         <description>Cisco ID 71.</description>
      </entry>
      <entry>
         <title>2012-2525</title>
         <description>Cisco ID 69.</description>
      </entry>
   </techOverview>
</iavmNotice>

Ensuite, pour utiliser xsl:for-each dans le contexte, vous ajouteriez un modèle comme celui-ci :

<xsl:template match="stuff:techOverview">
    <xsl:copy>
        <xsl:for-each select="stuff:entry/stuff:title">
            <xsl:if test="position() > 1">, </xsl:if>
            <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

Veuillez noter ce qui suit :

  • Assurez-vous que le stuff est lié à l'espace de nom correct, conformément au XML d'entrée.
  • Assurez-vous que vous n'avez pas d'autres modèles correspondant stuff:techOverview

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X