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

ANT Java Discussion :

modifier un valeur dans un fichier XML


Sujet :

ANT Java

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut modifier un valeur dans un fichier XML
    Salut
    j'ai un fichier xml généré automatiquement par un outil et lors de la compilation de mon projet j'aimerais pouvoir modifier quelques valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...  <interfaces>
        <interface xsi:type="wsdl:WSDLPortType" portType="ns1:FTPFileOutboundInterface"/>
      </interfaces>
      <esbBinding xsi:type="eis:EISImportBinding">
        <resourceAdapter name="Cnx_OutboundApp.IBM WebSphere Adapter for FTP" type="com.ibm.j2ca.ftp.FTPFileResourceAdapter">
          <properties/>
        </resourceAdapter>
        <connection type="com.ibm.j2ca.ftp.FTPFileManagedConnectionFactory" interactionType="com.ibm.j2ca.ftp.FTPFileInteractionSpec">
          <properties>
            <ftpUrl>ftp://localhost</ftpUrl>
            <password>localuser</password>
            <userName>loacluserpass</userName>
          </properties>
        </connection>...
    ce xml est généré automatiquement ou à l'aide d'éditeur.
    je voudrais remplacer est éléments de connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <ftpUrl>ftp://localhost</ftpUrl>
            <password>localuser</password>
            <userName>loacluserpass</userName>
    en fonction de variable fournies par mon script ANT
    donc remplacer le fichier par une copie contenant par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <ftpUrl>ftp://remothost</ftpUrl>
            <password>remotelogin</password>
            <userName>remotepassword</userName>
    Merci
    A+JYT

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Tu as avec ANT une tâche "replace" il me semble :


    Si j'ai bien compris ton besoin, ça devrait faire ce que tu souhaites.

    Ainsi, pour chaque remplacement à effectuer, tu précises :
    - le fichier dans lequel remplacer (peut être une variable ANT définie avec <property> ailleurs dans ton script)
    - le token à rechercher
    - la valeur de remplacement (peut être une variable ANT définie avec <property> ailleurs dans ton script)

    Ton fichier XML "toto.xml" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <ftpUrl>$FTP_URL</ftpUrl>
    <password>$FTP_LOGIN</password>
    <userName>$FTP_PASSWORD</userName>
    Ton script ANT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <property name="my.file" value="toto.xml" />
    <property name="ftp.login" value="remotelogin" />
    <property name="ftp.password" value="remotepassword" />
    <property name="ftp.address" value="ftp://remotehost" />
     
    <replace file="${my.file}" token="$FTP_URL" value="${ftp.address}"/>
    <replace file="${my.file}" token="$FTP_LOGIN" value="${ftp.login}"/>
    <replace file="${my.file}" token="$FTP_PASSWORD" value="${ftp.password}"/>
    A l'exécution du script ant, il y aura remplacement dans le fichier "toto.xml" des tokens définis par les variables de ton script.

    Plus "bourrin", ou si tu ne peux/veux pas modifier ton fichier XML pour mettre des "variables" de type "$FTP_URL", tu peux directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <replace file="toto.xml" token="ftp://localhost" value="ftp://remotehost"/>
    <replace file="toto.xml" token="localuser" value="remotelogin"/>
    <replace file="toto.xml" token="localuserpass" value="remotepassword"/>

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Merci pour cette réponse mais c'est justement là mon problème
    replace remplace du texte simple et ne connais pas la structure.
    je ne peux pas modifier mon fichier et je ne sais pas quelle valeur s'y trouve
    mon seul moyen est de repérer le tag
    par exemple pour ftpUrl je ne sais pas ce qu'il contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ftpUrl>ici ce trouve une url inconue</ftpUrl>
    du coup il me faudrait chercher quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <property name="my.file" value="toto.xml" />
    <property name="ftp.address" value="ftp://remotehost" />
     
    <replace file="${my.file}" token="<ftpUrl>.*</ftpUrl>" value="<ftpUrl>${ftp.address}</ftpUrl>"/>
    mais je ne sais si replace accepte les expressions régulières

    A+JYT

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Je vois...

    En effet, <replace> ne peut pas t'aider ici !

    Je ne pense pas qu'il gère les regexp (à vérifier dans la doc mais j'imagine que tu l'as déjà fait).

    Peut être existe t'il d'autres cibles ANT pour les regexp, mais ça ne pourra certainement pas se combiner avec replace...

    Solution possible je pense, mais plus lourde, c'est de te définir une tâche personnalisée avec "<taskdef>" qui appelle un petit programme JAVA que tu dois développer et qui te ferait le job (ce qui implique du parsing XML etc... c'est pas immédiat !).
    Je l'ai jamais utilisé avec un programme perso, mais ça ressemble à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <taskdef name="myreplace" classpath="my_classpath_here" classname="my_main_class_here" />
    On peut alors imaginer un programme JAVA qui gère les regexp dans le paramètre "token", ou bien tu lui passe directement un nom de tag XML et une valeur.

    Tu pourras alors utiliser ta cible perso dans ton script ANT comme bon te semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <property name="my.file" value="toto.xml" />
    <property name="ftp.address" value="ftp://remotehost" />
     
    <!-- Cas où ton programme gère un paramètre "token" qui interprète les regexp -->
    <myreplace file="${my.file}" token="<ftpUrl>.*</ftpUrl>" value="<ftpUrl>${ftp.address}</ftpUrl>"/>
     
    <!-- Cas où ton programme gère un paramètre "tag" qui remplace bêtement la valeur existante par une autre pour ce tag -->
    <myreplace file="${my.file}" tag="ftpUrl" value="${ftp.address}"/>

    Je vois rien d'autre de direct avec ANT...
    Bon courage et A+

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Merci

    je vais voir si je peux pas faire un "taskdef" avec un jacl (tcl embarqué en java)

    A+JYT

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  2. comment je pourrais modifier un attribut dans un fichier xml
    Par ryoussef19 dans le forum Visual C++
    Réponses: 6
    Dernier message: 24/08/2007, 14h16
  3. Modifier une valeur dans un fichier xml
    Par arthrax dans le forum VBScript
    Réponses: 3
    Dernier message: 03/04/2007, 09h46
  4. [DOM] Modifier un noeud dans un fichier XML
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/01/2007, 12h11
  5. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15

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