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 :

Modifier la valeur d'un élément d'un fichier XML


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 57
    Par défaut Modifier la valeur d'un élément d'un fichier XML
    Bonjour,

    Je suis absolument novice en XSL, je sais juste que ce language me permettrait de pouvoir modifier le contenu d'un élément dans un de mes fichiers XML

    J'ai un fichier XML qui contient ceci :

    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
     
    <document class="Article" genre="Courant" version="2.0">
    	<errors/>
    	<head>
    		<system status="Valide" version="0"/>
    		<dates>
    			<creation date="2010/11/11" time="09:06" by="robot1">Robot d'import</creation>
    			<lastupdate date="2010/11/11" time="09:06" by="61">robot2</lastupdate>
    		</dates>
    		<folders/>
    		<categories/>
    		<source>
    			<provider>La Provence</provider>
    			<date>20101111</date>
    			<id>9615081</id>
    			<revision date="2010/11/11" time="09:06" number="1"/>
    			<publication>BLP</publication>
    			<volume>Bouches</volume>
    			<issues><issue page="7">MARTI</issue><issue page="9">SALON</issue></issues>
    			<authors/>
    		</source>
    		<metadatas>
    			<pdf>20101111\BLP\ISTRES.pdf</pdf>
    			<pageid>ISTRES</pageid>
    			<storyid/>
    			<pubid/>
    			<hermes>
    				<logical-page/>
    				<page-level>BLP/BOUCHES/EDIT_MARTIG/30.PAGES</page-level>
    				<object-name>BLOC-NOTES</object-name>
    				<position x="2732" y="10735" width="2614" height="1680"/>
    				<editions><edition page="7">MARTI</edition><edition page="9">SALON</edition></editions>
    				<section></section>
    			</hermes>
    			<entities/>
    		</metadatas>
    		<categories_export/><folders_export/></head>
    	<components/>
    </document>
    Je veux seulement faire la chose suivante : récupérer tout mon XML tel quel sauf pour le contenu du sous élément <pdf> de l'élément <metadata> (qui a pour valeur 20101111\BLP\ISTRES.pdf) qui devrait être transformé en 2010\11\11\PDF\BLP\ISTRES.PDF.

    Le contenu de cet élément est toujours de la forme "AAAAMMJJ/<code>/<nom_fichier>", je veux le transformer en "AAAA/MM/JJ/PDF/<code>/<nom_fichier>".

    Pourriez vous me dire :
    1/ si ce genre de transformation est bien possible avec XSL
    2/ me donner des pistes pour le réaliser ?

    (je dispose de l'outil pour appliquer une transformation XSL sur un XML, il me manque "juste" à écrire la transformation en question...)

    En vous remerciant d'avance !!

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    il est possible d'effectuer de tels changements de valeur.

    Tu peux créer une règle pour chacun des éléments à transformer.
    Ensuite tu peux modifier leur contenu à l'aide des fonctions string-before
    et string-after par exemple.

  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
    On peut peut-être aller un peu plus loin.

    Déjà, pour recopier tout tel quel, il faut définir cette règle à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:template>
    Et pour ne pas recopier certaines choses telles quelles, il faut une règle sur ces choses.
    Dans notre cas, le contenu texte des éléments <pdf> fils de <metadata> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="metadata/pdf/text()">
      <!-- Définir ici que mettre à la place du texte original -->
    </xsl:template>
    Vu que le format de la date est très simple, 6 chiffres, je me casserais pas la tête.
    Des <xsl:value-of> dont le select extrait une partie du texte avec substring(., depart, longueur),
    entrecoupés de <xsl:text> pour mettre les / et le /PDF

    Reste à faire des tutoriels XSLT et xPath pour essayer de comprendre ce chinois, et de lire des choses sur substring() en xPath.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2010, 08h42
  2. [DOM] Modifier la valeur d'un noeud dans un fichier XML
    Par rob2-9 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/08/2008, 20h31
  3. [DOM] modifier la valeur d'un élément de formulaire
    Par philippe.z dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/06/2007, 19h47
  4. Réponses: 8
    Dernier message: 04/04/2007, 12h22
  5. Réponses: 9
    Dernier message: 04/05/2006, 17h33

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