XSLT : afficher text en fonction de la position d'un élément

a marqué ce sujet comme résolu.

Bonjour,

Je souhaiterais à plusieurs endroits ajouter une virgule à condition qu’il existe un élément avant. Par exemple, à l’élément forename en position 1, le virgule ne s’affiche pas mais l’élément forename en position 2, la virgule s’affiche. Le xml de départ se situe ici : https://api.archives-ouvertes.fr/search/?q=:&wt=xml-tei&rows=5

Merci d’avance

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:t="http://www.tei-c.org/ns/1.0" version = "1.0"> 
<xsl:output method="text"/>
<xsl:template match = "/">
    <xsl:text>{"authors":[</xsl:text>
    <xsl:apply-templates select = "t:TEI/t:text/t:body/t:listBibl/t:biblFull/t:titleStmt/t:author"/>
    <xsl:text>],"listOrg":[</xsl:text>
    <xsl:apply-templates select = "t:TEI/t:text/t:back/t:listOrg/t:org"/>
    <xsl:text>]}</xsl:text>
</xsl:template>

<xsl:template match = "t:author">
    <xsl:apply-templates select = "t:author[position()!=1]"/>
    <xsl:text>&#10;{"role":"</xsl:text>
    <xsl:value-of select = "@role"/>
    <xsl:text>", "persoName" : {"forename" : [</xsl:text>
    <xsl:apply-templates select = "t:persName/t:forename"/>
    <xsl:text>],"surname" : [</xsl:text>
    <xsl:apply-templates select = "t:persName/t:surname"/>
    <xsl:text>]}</xsl:text>
    <xsl:apply-templates select = "t:email[contains(@type, 'md5')]"/>
    <xsl:apply-templates select = "t:email[contains(@type, 'domain')]"/>
    <xsl:apply-templates select = "t:ptr"/>
    <xsl:apply-templates select = "t:idno"/>
    <xsl:apply-templates select = "t:affiliation"/>
    <xsl:text>} </xsl:text>
</xsl:template>

<xsl:template match = "t:author[position!=1]">
        <xsl:text>, </xsl:text>
</xsl:template>

<xsl:template match = "t:persName/t:forename">
        <xsl:apply-templates select = "t:forename[position()!=1]"/>
        <xsl:text>{</xsl:text>
        <xsl:text>"value" : "</xsl:text>
        <xsl:value-of select = "."/>
        <xsl:text>"} </xsl:text>
</xsl:template>

<xsl:template match = "t:forename[position!=1]">
        <xsl:text>, </xsl:text>
</xsl:template>

<xsl:template match = "t:persName/t:surname">
        <xsl:apply-templates select = "t:surname[position()!=1]"/>
        <xsl:text>{"value" : "</xsl:text>
        <xsl:value-of select = "."/>
        <xsl:text>"}</xsl:text>
</xsl:template>

<xsl:template match = "t:surname[position!=1]">
        <xsl:text>, </xsl:text>
</xsl:template>

<xsl:template match = "t:email[contains(@type, 'md5')]">
        <xsl:text>, "email" : [{"type" : "md5", "value" : "</xsl:text>
        <xsl:value-of select = "."/>
        <xsl:text>"}, </xsl:text>
</xsl:template>

<xsl:template match = "t:email[contains(@type, 'domain')]">
        <xsl:text>{ "type" : "domain", "value" : "</xsl:text>
        <xsl:value-of select = "."/>
        <xsl:text>"}] </xsl:text>
</xsl:template>


<xsl:template match = "t:ptr">
        <xsl:text>, "ptr" : {"type" : "url", "target" : "</xsl:text>
        <xsl:value-of select = "@target"/>
        <xsl:text>"}</xsl:text>
</xsl:template>

<xsl:template match = "t:idno">
        <xsl:text>, "idno" : {"type": "</xsl:text>
        <xsl:value-of select = "@type"/>
        <xsl:text>", "value" : "</xsl:text>
        <xsl:value-of select = "."/>
        <xsl:text>"}, </xsl:text>
</xsl:template>

<xsl:template match = "t:affiliation">
        <xsl:text>"affiliation" : {"ref": "</xsl:text>
        <xsl:value-of select = "@ref"/>
        <xsl:text>"} </xsl:text>
</xsl:template>


<xsl:template match = "t:TEI/t:text/t:back/t:listOrg/t:org">
    <xsl:apply-templates select = "t:org[position()!=1]"/>
    <xsl:text>&#10;{"type" : "</xsl:text>
    <xsl:value-of select = "@type"/>
    <xsl:text>", "id" : "</xsl:text>
    <xsl:value-of select = "@xml:id"/>
    <xsl:text>", "status" : "</xsl:text>
    <xsl:value-of select = "@status"/>
    <xsl:text>", "orgName" : [</xsl:text>
    <xsl:apply-templates select = "t:orgName[not(@type)]"/>
    <xsl:apply-templates select = "t:orgName[contains(@type, 'acronym')]"/>
    <xsl:text>]</xsl:text>
    <xsl:apply-templates select = "t:desc"/>
    <xsl:apply-templates select = "t:listRelation"/>    
    <xsl:text>} </xsl:text>
</xsl:template>

<xsl:template match = "t:org[position()!=1]">
        <xsl:text>, "x"</xsl:text>
</xsl:template>

<xsl:template match = "t:orgName[not(@type)]">
    <xsl:text>{"value" : "</xsl:text>
    <xsl:value-of select = "."/>
    <xsl:text>"}, </xsl:text>
</xsl:template>

<xsl:template match = "t:orgName[contains(@type, 'acronym')]">
    <xsl:text>{"type" : "acronyme", "value" : "</xsl:text>
    <xsl:value-of select = "."/>
    <xsl:text>"} </xsl:text>
</xsl:template>

<xsl:template match = "t:desc">
    <xsl:text>, "desc" : {"adresse" : {"addrLine" : {"value" : "</xsl:text>
    <xsl:value-of select = "t:address/t:addrLine"/>
    <xsl:text>"}, "country" : {"key" : "</xsl:text>
    <xsl:value-of select = "t:address/t:country/@key"/>
    <xsl:text>"}}</xsl:text>
    <xsl:apply-templates select = "t:ref"/>
    <xsl:text>}</xsl:text>
</xsl:template>

<xsl:template match = "t:ref">
    <xsl:text>, "ref" : {"type" : "</xsl:text>
    <xsl:value-of select = "@type"/>
    <xsl:text>", "value": "</xsl:text>
    <xsl:value-of select = "."/>
    <xsl:text>"}</xsl:text>
</xsl:template>


<xsl:template match = "t:listRelation">
    <xsl:text>, "lisRelation" : [</xsl:text>
    <xsl:apply-templates select = "t:relation"/>
    <xsl:text>]</xsl:text>
</xsl:template>

<xsl:template match = "t:relation">
    <xsl:apply-templates select = "t:relation[position()!=1]"/>
    <xsl:text>{"relation" : {"active" : "</xsl:text>
    <xsl:value-of select = "@active"/>
    <xsl:text>", "type" : "</xsl:text>
    <xsl:value-of select = "@type"/>
    <xsl:text>"}}</xsl:text>
</xsl:template>

<xsl:template match = "t:relation[position()!=1]">
        <xsl:text>, </xsl:text>
</xsl:template>


</xsl:stylesheet> 
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte