Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

Transformation d'un fichier XML-TEI en fichier CSV


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Transformation d'un fichier XML-TEI en fichier CSV
    Bonjour à tous,

    Je bute actuellement sur ma feuille de style. J'aimerais récupérer un certain nombre d'informations à partir d'un fichier XML-TEI et les structurer pour donner in fine un fichier CSV. Seulement j'ai un peu de mal à construire mes expressions xPath. Pourriez-vous m'aider ?

    Voici ma feuille de style xsl :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sl = "http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" version = "1.0">
     
       <!-- ############################## -->
       <!-- Formatage de l'arbre de sortie -->
       <!-- ############################## -->
     
    <xsl:output method="text" encoding="utf-8"/>
     
       <!-- ############################## -->
       <!--            Templates           -->
       <!-- ############################## -->
     
    <xsl:template match = "/">
    	<xsl:apply-templates select="/tei:TEI/tei:text/tei:body/tei:listBibl"></xsl:apply-templates> <!-- listBibl car il faut un noeud qui ne se répète pas comme author afin d'éviter les nombreuses occurrences -->
    </xsl:template>
     
    <xsl:template match = "tei:listBibl">
    	<xsl:text>prenom,nom,idHal,affiliation,idOrg,nomOrg,adresseOrg,PaysOrg
    </xsl:text>
    	<xsl:apply-templates select="/tei:TEI/tei:text/tei:body/tei:listBibl/tei:biblFull/tei:titleStmt/tei:author/tei:persName"/>
    </xsl:template>
     
    <xsl:template match = "tei:persName">
    	<xsl:apply-templates select="tei:forename"/> <!--prenom-->
    	<xsl:text>,</xsl:text>
    	<xsl:apply-templates select="tei:surname"/> <!--nom-->
    	<xsl:text>,</xsl:text>
    	<xsl:apply-templates select="../tei:idno[@type='halauthorid']"/>
    </xsl:template>
     
    <xsl:template match = "tei:idno[@type='halauthorid']">
    	<xsl:value-of select = "."/>
    	<xsl:text>,</xsl:text>
    	<xsl:apply-templates select="../tei:affiliation"/>
    </xsl:template>
     
    <xsl:template match="tei:affiliation">
    	<xsl:variable name="idOrg"> <!-- on est dans le noeud affiliation et on veut récupérer l’attribut ref en enlevant le # -->
    		<xsl:value-of select="substring-after(@ref, '#')"/>
    	</xsl:variable>
    	<xsl:message><xsl:value-of select="$idOrg"/><!--pour utiliser la variable idOrg--></xsl:message><!--pour le débug-->
    	<xsl:value-of select="$idOrg"/> <!-- pour afficher la ref affiliation sur le fichier csv -->
    	<xsl:text>,</xsl:text>
    	<xsl:apply-templates select="../../tei:back/tei:listOrg/tei:org[@xml:id='$idOrg']"/>
    </xsl:template>
     
    <xsl:template match="tei:org[@xml:id='$idOrg']">
    	<xsl:apply-templates select="tei:idno[@type='IdRef']"/>
    	<xsl:text>,</xsl:text>
    	<xsl:apply-templates select="following-sibling::tei:orgName"/>
    </xsl:template>
     
    <xsl:template match="tei:orgName">
    	<xsl:apply-templates select="tei:orgName[1]"/> <!-- libellé -->
    	<xsl:text> (</xsl:text>
    	<xsl:apply-templates select="tei:orgName[2]"/> <!-- acronyme -->
    	<xsl:text>),</xsl:text>
    	<xsl:apply-templates select="../tei:address/tei:addrLine"/>
    </xsl:template>
     
    <xsl:template match="tei:addrLine">
    	<xsl:apply-templates select="."/>
    	<xsl:text>,</xsl:text>
    	<xsl:apply-templates select="following-sibling::tei:country"/>
    </xsl:template>
     
    <xsl:template match="tei:country">
    	<xsl:apply-templates select="."/>
    	<xsl:text>
    </xsl:text>
    </xsl:template>
     
    </xsl:stylesheet>


    Le fichier XML-TEI :



    Merci par avance !

  2. #2
    Membre émérite
    Pas plus d'information ?
    Bonjour,

    ok, mais c'est pour quelle template, quel chemin que tu bloques ?
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    Candidat au Club
    Citation Envoyé par polymorphisme Voir le message
    Bonjour,

    ok, mais c'est pour quelle template, quel chemin que tu bloques ?
    Bonjour,

    Merci pour votre réponse. Finalement quelqu’un d’extérieur a pu m’aider et résoudre mon pb.

    Bonne journée

###raw>template_hook.ano_emploi###