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

Format d'échange (XML, JSON...) Java Discussion :

Transformer fichier texte en XML, suivant une arborescence


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Transformer fichier texte en XML, suivant une arborescence
    Bonjour à tous,

    Je reviens vers vous dans le cadre d'un projet où je dois transformer un fichier texte dans un XML. Le fichier à le format suivant :

    com.commande|com.contractant|com.correspondant|com.email=valeur_mail
    com.commande|com.contractant|com.correspondant|com.nom=valeur_nom
    com.commande|com.contractant|com.correspondant|com.telephone=valeur_telephone
    com.commande|com.contractant|com.num_contrat=valeur_contrat
    com.commande|com.correspondant_technique|com.email_correspondant_technique=
    com.commande|com.correspondant_technique|com.nom_correspondant_technique=
    com.commande|com.correspondant_technique|com.telephone_correspondant_technique=
    J'aimerais faire sortir le fichier XML suivant :
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <com:commande>
      <com:contractant>
        <com:num_contrat>valeur_contrat</com:num_contrat>
        <com:correspondant>
          <com:nom>valeur_nom</com:nom>
          <com:telephone>valeur_telephone</com:telephone>
          <com:email>valeur_mail</com:email>
        </com:correspondant>
      </com:contractant>
      <com:correspondant_technique>
          <com:email></com:email>
          <com:nom></com:nom>
          <com:telephone></com:telephone>
      </com:correspondant_technique>
    </com:commande>

    Mais j'ai un peu du mal à visualiser comment transformer mon texte dans hiérarchie XML...

    L'idée serait d'utiliser une boucle du type :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                // staff elements
                Element staff = doc.createElement("Staff");
                rootElement.appendChild(staff);
     
                // set attribute to staff element
                attr = doc.createAttribute("id");
                attr.setValue("1");
                staff.setAttributeNode(attr);

    Est-ce que quelqu'un pourrait me donner une idée de comment commencer à ordonner l’arborescence XML, svp ?

    Je vous remercie par avance,
    Marc

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Bon, j'avance aux petits pas

    J'ai essayé le code:
    Code java : 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
    //do all other nodes:
                HashMap<String, String> allNodes = PropertiesFile.readAllProperties(Constants.OFFER_PROPERTIES_FILE_PATH);
                for(Map.Entry propertieName : allNodes.entrySet()){
     
                    Element curNode = rootElement;
     
                    String nodeTree = propertieName.getKey().toString().replace(".", ":");
     
                    int nodeTreeSize = nodeTree.split("\\|").length;
                    for (int i = 0; i < nodeTreeSize; i++) {
                        String node = nodeTree.split("\\|")[i];
                        Element newNode = doc.createElement(node);
                        if (i==nodeTreeSize-1) newNode.appendChild(doc.createTextNode(propertieName.getValue().toString()));
     
                        curNode.appendChild(newNode);
                        curNode = newNode;
                    }
                }

    Mais le résultat est un fichier XML qui contient plusieurs fois les mêmes balises :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <com:commande>
            <com:correspondant_technique/>
        </com:commande>
        <com:commande>
            <com:correspondant_technique>
                <com:nom_correspondant_technique/>
            </com:correspondant_technique>
        </com:commande>

    J'ai pensé qu'il allait utiliser des balises déjà existantes, mais il créé des nouvelles...

    Est-ce que vous auriez des idées ?

    Merci encore une fois,
    Marc

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    tu te rends forcément compte qu'on peut rien comprendre à ce que tu racontes.

    Explique-toi, s'il te plaît. Fais comme si on n'était pas dans ta tête, et qu'on ne devinera rien que tu choisisses de ne pas dire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Bonjour thelvin,

    Merci de votre retour. Je suis vraiment désolé mais j'ai pensé être clair dans mes explications...

    L'idée serait de transformer le fichier texte donnée dans un fichier XML.
    Le fichier texte contient des "propriétés" qui doivent devenir les balises du fichier XML, par exemple :

    Les lignes:
    com.commande|com.contractant|com.correspondant|com.email=valeur_mail
    com.commande|com.contractant|com.correspondant|com.nom=valeur_nom
    com.commande|com.contractant|com.correspondant|com.telephone=valeur_telephone
    Doivent devenir le XML:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <com:commande>
      <com:contractant>
        <com:num_contrat>valeur_contrat</com:num_contrat>
        <com:correspondant>
          <com:nom>valeur_nom</com:nom>
          <com:telephone>valeur_telephone</com:telephone>
          <com:email>valeur_mail</com:email>
        </com:correspondant>
      </com:contractant>
    <com:commande>

    Les pipes ("|") seraient les marques pour définir l'arborescence du XML et je remplace les "." par ":".

    Je pense qu'il sera peut-être un peu plus clair maintenant ?

    Sinon ce matin j'ai réussi à trouver la solution (pour ne pas récréer les balises comme dans mon code précédant) :
    Code java : 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
    //do all other nodes:
                HashMap<String, String> allNodes = PropertiesFile.readAllProperties(Constants.OFFER_PROPERTIES_FILE_PATH);
                for(Map.Entry propertieName : allNodes.entrySet()){
     
                    Element curNode = rootElement;
     
                    String nodeTree = propertieName.getKey().toString().replace(".", ":");
     
                    int nodeTreeSize = nodeTree.split("\\|").length;
                    for (int i = 0; i < nodeTreeSize; i++) {
                        String node = nodeTree.split("\\|")[i];
    
                        org.w3c.dom.Node newNode = null;
                            if (doc.getElementsByTagName(node).getLength()==0){
                                newNode = doc.createElement(node);
                            }else{
                                newNode = doc.getElementsByTagName(node).item(0);
                            }
    
                        if (i==nodeTreeSize-1) newNode.appendChild(doc.createTextNode(propertieName.getValue().toString()));
     
                        curNode.appendChild(newNode);
                        curNode = newNode;
                    }
                }

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouais en gros, fallait expliquer comment ça marchait vraiment les pipes. Et puis c'est super bizarre un XML dans lequel aucune balise n'existe plus d'une fois, donc il fallait l'expliquer aussi.

    Bon sinon, Je sais qu'il existe en théorie des documents XML qui autorisent les balisent à avoir : dans leur nom, mais dans le monde réel ce n'est pas du tout acceptable et tu ne pourras rien en faire.

    Normalement les : sont là pour les namespaces et rien d'autre. Tu ne peux pas les utiliser pour autre chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Hello thevin,

    En effet le fichier XML est une requête SOAP qui doit être envoyé à un web service avec des données du client et de l'offre choisi.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ok ça explique bien des choses. Mais tu arrives à envoyer des requêtes SOAP en générant toi-même le XML ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Il s'agit d'un script qu'était déjà en place, mais la réponse est bien oui, il génère lui même le XML pour envoyer au web service...
    Je suis en train de faire quelques modifications, mais la base doit rester la même...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déplacement de fichiers suivant une arborescence bien définie
    Par midou99 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 02/04/2013, 14h59
  2. Réponses: 2
    Dernier message: 15/02/2013, 11h35
  3. transformation fichier excel en XML
    Par fanette dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 24/01/2008, 10h47
  4. [DTD] Valider un fichier xml suivant une DTD
    Par Tail dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/06/2006, 11h23
  5. transformation fichier log vers XML
    Par natacha79 dans le forum Logging
    Réponses: 2
    Dernier message: 09/06/2006, 13h07

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