IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Script XSLT pour renommer


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 53
    Par défaut Script XSLT pour renommer
    Bonjour,

    je souhaite renommer les noms de mes balises et ceci via talend. J'ai une table qui contient les transformations et les champs qui vont subir ces transformation et pour chaque ligne je stock ça dans une variable et apres executer le script suivant :

    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="" indent="yes" />
     
    <xsl:param name = "generique" select = "' '"/>
    <xsl:param name = "arbre" select = "XXX/Pers/nom"/>
     
    <xsl:template match= "{$arbre}">
    <xsl:element name="{$generique}">
    <xsl:apply-templates select="@*[name()!='val']|node()"/>
    </xsl:element>
    </xsl:template>
     
    <xsl:template match="@*|node()" priority="0">
    <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>

    Avec arbre contient ce que je veux transformer et generique contient les nouveaux noms

    Mais le script ne marche pas, il m'affiche une erreur comme quoi: il y aura rien à selectionner pour cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="@*[name()!='val']|node()"/>
    ci-joint le fichier XSL

    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    J'ai de gros doutes sur la faisabilité de ton XSL en l'état, mais pourrais-tu nous montrer les données ?

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Non, l'erreur est complètement différente.

    Cette syntaxe : <xsl:template match= "{$arbre}"> n'est pas valide.

    En XSLT 1.0 ou 2.0 il n'y a pas de manière pratique de passer un template en paramètre. Il faut utiliser l'extension EXSLT dyn:evaluate(), ou bien définir ton propre format de sélection d'éléments à renommer, et calculer toi-même si les éléments y correspondent ou pas.

    Le plus simple, en fait, serait de créer une feuille de style XSLT à la volée, avec le bon template directement renseigné. Mais je ne sais pas si Talend le permet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 53
    Par défaut
    Citation Envoyé par Loceka Voir le message
    J'ai de gros doutes sur la faisabilité de ton XSL en l'état, mais pourrais-tu nous montrer les données ?
    j'ai mis en piece jointe mon fichier de données

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 53
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Non, l'erreur est complètement différente.

    Cette syntaxe : <xsl:template match= "{$arbre}"> n'est pas valide.

    En XSLT 1.0 ou 2.0 il n'y a pas de manière pratique de passer un template en paramètre. Il faut utiliser l'extension EXSLT dyn:evaluate(), ou bien définir ton propre format de sélection d'éléments à renommer, et calculer toi-même si les éléments y correspondent ou pas.

    Le plus simple, en fait, serait de créer une feuille de style XSLT à la volée, avec le bon template directement renseigné. Mais je ne sais pas si Talend le permet.
    Oui t'as raison du coup j'ai essayé de modifier le script comme le suivant :

    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
    sl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="" indent="yes" />
     
    <xsl:param name = "generique" />
    <xsl:param name = "arbre" />
     
    <xsl:variable name="vXpath"  select= "$arbre" />
     
    <xsl:template match= "/">
       <xsl:value-of select="$vXpath"/>
       <xsl:element name ="{$generique}">
         <xsl:apply-templates select="child"/>
       </xsl:element>
    </xsl:template>
     
    <xsl:template match="@*|node()" priority="0">
    <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Tu peux modifier le script autant que tu veux, ce qu'il faut c'est créer une feuille XSLT à la volée, qui ne prend aucun paramètre, aucune variable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut Replace de balises avec du xslt
    Bonjour les amis,

    Je suis bloquée sur un sujet depuis quelques jours et j'ai vraiment besoin d'aide.
    Je travaille actuellement sur Talend et j'utilise le composant txslt qui permet de faire des transformations sur un fichiers xml par le biais d'un fichiers xslt (voir les pièces jointes)

    Ce composant permet également de définir des paramètres qui pourront être appelés par le fichiers xslt.

    L'objectif de cette utilisation est de pouvoir faire des replaces de balises dans mon fichiers xml de façon itérative. Je m'explique : j'ai une table contenant trois colonnes :

    Col1 : chemin de la balise (par exemple Personne)
    Col2 : nom des balises à modifier (nom)
    Col3 : nom des balises pour modification (C_N_N)

    Mon traitement fait en sorte que mon fichier xslt s'exécute en boucle sur chaque ligne de la table en prenant "col1"+"/"+"clo2" et "col3" comme paramètres.

    Le xslt que j'ai utilisé XSLT.png utilise les paramètres :
    chemin = Personne/nom (chemin + balise à remplacer);
    generique = C_N_N (balise de remplacement);

    J'ai vu malheureusement qu'on ne peut pas utiliser $param dans le match d'un template c'est pour cela que j'ai eu l'idée de mettre par exemple le chemin en dur dans le <xsl:template match> et utiliser une fonction qui ferai le replace en prenant juste col2 et col3 comme paramètre. Cela est-il possible ?

    Merci infiniment pour votre aide.
    Images attachées Images attachées   

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/01/2019, 21h23
  2. Script shell pour renommer des fichiers dans des sous répértoires
    Par ibuto dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/12/2013, 20h52
  3. Script XSLT pour supprimser des elements
    Par azewxc dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/07/2013, 17h04
  4. script shell pour renommer un fichier
    Par wang_xue dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 15/11/2007, 15h45
  5. Recherche d'un script PHP pour renommer des fichiers en masse
    Par pekka77 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 19/11/2006, 23h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo