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 :

Modification XML XSLT


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2012
    Messages : 16
    Par défaut Modification XML XSLT
    Bonjour

    Je me lance dans la transformation XML est voila mon soucis :

    D'un coté j'ai un fichier XML contenant
    <st>
    <ID>TOTO</ID><Theme1>audit</Theme1><Theme2>management</Theme2><Theme3>Aucun</Theme3>
    </st>
    <st>
    <ID>TATA</ID><Theme1>rapport</Theme1><Theme2>qualite</Theme2><Theme3>Aucun</Theme3>
    </st>
    De l'autre j'ai X fichiers XML dont le nom du fichier est égale a l'ID du 1er fichier :

    TOTO.xml
    TATA.xml

    Contenu de TOTO.xml :

    <Article ID="TOTO" Theme1="management" Theme2="management_de_projet" Theme3="management_de_la_qualité"> etc.

    Je voudrai modifier les Theme de chaque fichier xml par celui du 1er fichier

    Je sais pas si je suis clair, n'hésitez pas a me demander des précisions.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Par défaut reponse
    Qu'as tu déjà tenté au niveau XSL ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2012
    Messages : 16
    Par défaut
    Quleque chose comme cela :

    <xsl:template match="st">
    <st>
    <id><xsl:value-of select="."/></id>
    <id><xsl:value-of select="document(concat ('C:/IN/',.,'.xml'))//@id"/><xsl:call-template name="Theme"/></id>
    </st>
    </xsl:template>

    Je lance mon XSL sur mon premier fichier.
    En fait je sais aller chercher une info dans X fichier par rapport a une liste de document dans un fichier, par contre je ne sais pas modifier les X fichiers par rapport a une liste donnée ?

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2012
    Messages : 16
    Par défaut
    au secours

  5. #5
    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
    XSLT ne modifie pas des fichiers. XSLT crée des fichiers. Tu risques d'avoir des soucis si tu écris les fichiers en même temps que tu les lis.

    Pour créer des fichiers en XSLT 2.0, on peut utiliser <xsl:result-document>. Mais il faut un moteur compatible XSLT 2.0.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2012
    Messages : 16
    Par défaut
    En faite je ne crée pas un nouveau fichier, je réecris le meme avec quelque modif dans le contenu

  7. #7
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Par défaut
    tu es obligé de faire ces transformations en XSL ? tu ne peux pas changer ton process (php, ... ) ?

  8. #8
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Modifier ou créer un nouveau, c'est de la rhétorique. C'est tout à fait faisable. Mais, d'abord, il ne faut pas nous montrer un xml fragment avec multiple <st>...</st> seulement. Montrez-moi un document bien-formé avec des st, et puis je vais vous aider. Ce n'est pas tellement évident pour les débutant.

  9. #9
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Supposons le fichier contenant les données actuelles est nommé Courant.xml qui est fix et dans la même directoire que les fichiers CER-A-IV-51.xml etc etc...

    On peut appliquer une transformation xslt sur chacun d'eux: voici le document xslt qui peut s'écrire comme ça modulo tout style personnel que j'adapte et que je n'impose à personne.
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" indent="yes" />
     
    <xsl:param name="data" select="'Courant.xml'" />
    <xsl:param name="dic" select="document($data)/Courant" />
     
    <xsl:template match="*|text()|@*|comment()|processing-instruction()">
      <xsl:copy>
        <xsl:apply-templates select="*|text()|@*|comment()|processing-instruction()" />
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="Article">
      <xsl:copy>
        <xsl:if test="@ID">
          <xsl:copy-of select="@ID" />
          <xsl:choose>
            <xsl:when test="$dic/Article/id[.=current()/@ID]">
              <xsl:call-template name="proc_attr">
                  <xsl:with-param name="attr_node" select="@Theme1" />
                  <xsl:with-param name="attr_newname" select="'Theme1'" />
                  <xsl:with-param name="node" select="$dic/Article/id[.=current()/@ID]/following-sibling::Theme1" />
              </xsl:call-template>
              <xsl:call-template name="proc_attr">
                  <xsl:with-param name="attr_node" select="@Theme2" />
                  <xsl:with-param name="attr_newname" select="'Theme2'" />
                  <xsl:with-param name="node" select="$dic/Article/id[.=current()/@ID]/following-sibling::Theme2" />
                </xsl:call-template>
                <xsl:call-template name="proc_attr">
                  <xsl:with-param name="attr_node" select="@Theme3" />
                  <xsl:with-param name="attr_newname" select="'Theme3'" />
                  <xsl:with-param name="node" select="$dic/Article/id[.=current()/@ID]/following-sibling::Theme3" />
                </xsl:call-template>
                <xsl:apply-templates select="@*[name()!='ID' and name()!='Theme1' and name()!='Theme2' and name()!='Theme3']" />
              </xsl:when>
              <xsl:otherwise>
                <xsl:apply-templates select="@*[name() != 'ID']" />
              </xsl:otherwise>
            </xsl:choose>
            <xsl:apply-templates select="*|text()|comment()|processing-instruction()" />
          </xsl:if>
          <xsl:if test="not(@ID)">
            <xsl:apply-templates select="*|text()|@*|comment()|processing-instruction()" />
          </xsl:if>
        </xsl:copy>
    </xsl:template>
     
    <xsl:template name="proc_attr">
      <xsl:param name="attr_node" />
        <xsl:param name="attr_newname" />
        <xsl:param name="node" />
        <xsl:if test="$attr_node">
        <xsl:choose>
          <xsl:when test="$node">
            <xsl:attribute name="{$attr_newname}">
              <xsl:value-of select="$node" />
            </xsl:attribute>
          </xsl:when>
          <xsl:otherwise>
            <xsl:copy-of select="$attr_node" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:if>
    </xsl:template>
     
    </xsl:stylesheet>
    ps: Le préfixe xsi doit être défini dans les ID.xml: il n'en est pas encore comme montré; ou bien il est défini par défaut sous une application bien définie? En tout cas... Ok, il est là caché par l'emoticon!

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2012
    Messages : 16
    Par défaut
    Un grand merci

    Ton code est trés puissant, je commence a voir les possibilité, quelque réglage et je pense que cela sera parfait

    Merci beaucoup ! Je vous tiens au <Courant></Courant>

Discussions similaires

  1. [XML+XSLT+MSXML] Ecrire ses propres fonctions
    Par görgh dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 19/05/2005, 13h04
  2. [XML-XSLT] Données dans un tableau
    Par Hoegaarden dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 10/12/2004, 15h51
  3. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08
  4. Astuces XML/XSLT
    Par haypo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/06/2003, 08h42

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