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é
    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. ###raw>post.musername###
    Membre éclairé
    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
      0  0

  3. #3
    Modérateur

    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. ###raw>post.musername###
    Membre éclairé
    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;
                    }
                }
      0  0

  5. #5
    Modérateur

    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é
    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

    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é
    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...

###raw>template_hook.ano_emploi###