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

Développement Web en Java Discussion :

Remplir fichier XML en fonction d'un tableau


Sujet :

Développement Web en Java

  1. #41
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fredbubu65 Voir le message
    En fait, j'ai réussi à l'executer mais en mettant la 1ère ligne du if en commentaire :
    Et tu ne t'es pas dit que cette ligne de code avait un but. Que si elle était là c'était pour une bonne raison. Et je ne vois pas pourquoi elle ne fonctionnerait pas. A la limite tu vas sur le forum JavaScript et tu soumets le problème. Mais tu vires pas une ligne comme ça au hasard. C'est n'importe quoi. Surtout vu que tu ne supprimes que cette ligne, c'est tu ne comprends pas du tout à quoi ça sert


    [edit]pourquoi le code que tu montres ne correspond pas à ce que j'ai posté ?

    Citation Envoyé par fredbubu65 Voir le message
    Par contre, comment il faut faire pour indenter correctement le fichier XML produit car il s'affiche sur une seule ligne ? :
    Mais qu'est-ce que tu peux en avoir à faire de l'indentation. Pareil, il y'a un forum JavaScript pour les questions concernant le JavaScript. Tu demandes s'il y a une API pour formater un xml. Ou au pire, tu fais ça par concaténation de chaîne, en insérant des séries d'espace dans la génération du XML, en modifiant la fonction qui créé le xml (que tu dois de toute manière adapter).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #42
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    [edit]pourquoi le code que tu montres ne correspond pas à ce que j'ai posté ?
    Je comprends : le rendu du forum modifie le contenu du code et ce qui est affiché n'est pas bon.

    Je mets le code en pièce jointe :

    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
      <title>Démo sauvegarde d'une table en xml</title>
      <style>
        table {border-collapse: collapse; }
    	table, td {border: 1px solid black;}
    	td {padding: 5px;}
    	#buttonToolBar {padding: 5px 0;} 
      </style>
      <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
    </head>
    <body>
    	<div id="buttonToolBar">
    		<button type="button" id="buttonSave">Sauver en XML</button>
        </div>
    	<table id="matable">
    		<thead>
    			<td>col 1</td>
    			<td>col 2</td>
    			<td>col 3</td>
    		</thead>
    		<tbody>
    			<tr>
    				<td>1</td>
    				<td>2</td>
    				<td>3</td>
    			</tr>
    			<tr>
    				<td>a</td>
    				<td>b</td>
    				<td>c</td>
    			</tr>
    			<tr>
    				<td>truc</td>
    				<td>machin</td>
    				<td>bidule &amp; &lt;bidule&gt;</td>
    			</tr>
    		</tbody>
    	</table>
    	<script type="text/javascript">
    		    function encodeAndEscapeXML(string) { 
    			    if ($.trim(string) != "") {
    			        string = string.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "'");
    			        string = string.replace(/&(?!(amp;)|(lt;)|(gt;)|(quot;)|(#39;)|(apos;))/g, "&amp;");
    			        string = string.replace(/([^\\])((\\\\)*)\\(?![\\/{])/g, "$1\\\\$2");  //replaces odd backslash(\\) with even.
    			    }
    			    else {
    			        string = "";
    			    }
        			return string;
    		    }
    			function tableToXML(selector) {
                var xml = "<table>";
    			$(selector) .find("tr").each(
    				function() {
    					xml += "<row>";
    					$(this).find("td").each(
    						function() {
    							xml+= "<col>" + encodeAndEscapeXML($(this).html()) + "</col>";
    								   });  
    						xml += "</row>";
    					} );
    			xml += "</table>";
    			return xml;
    		} 
            function saveXMLFile (name, data) {
            	saveFile(name, 'text/xml, application/xml', data);
            }
            function saveFile (name, type, data) {
    			    if (data != null && navigator.msSaveBlob)
    			        return navigator.msSaveBlob(new Blob([data], { type: type }), name);
    			    var $a = $("<a style='display: none;'/>");
    			    var url = window.URL.createObjectURL(new Blob([data], {type: type}));
    			    $a.attr("href", url);
    			    $a.attr("download", name);
    			    $("body").append($a);
    			    $a[0].click();
    			    window.URL.revokeObjectURL(url);
    			    $a.remove();
    		}
            $( document ).ready(function() {
    
    
            	$("#buttonSave").click(function() {
            		saveXMLFile("matable.xml", tableToXML("#matable"));
    
            	});
     
    
    		});
    		
    	</script>
    </body>
    </html>  
    
    Fichiers attachés Fichiers attachés
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #43
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ayant parlé avec un collègue, il m'a dit qu'AJAX ne servait à rien. AJAX sert juste à rafraichir une partie de la page, or ce fonctionnement ne sert à rien dans mon application.
    Ce n'est pas mon rôle de critiquer ton collègue et d'autant plus que je doute la fidélité de citation et aussi qu'il n'a pas de chance de se défendre... Je trouve tout bête de dire ça sans qualification. Si tu clique le bouton soumettre et le serveur fait créer un xml, ça montre déjà en lui-même qu'il ne s'agit pas un rafraîchissement une partie ou l'entièreté de la page ...

    En [2], opérationnellement, je dis simplement d'ajouter une ligne là, e.preventDefault(), Et c'est difficile à comprendre? Fonctionnellement, ça peut être un peu plus difficile à comprendre et j'ai déjà expliqué sommairement, mais opérationnellement - ajoutant une ligne de code - c'est difficile? En plus, sans ça, je parie que tu n'aies jamais fait fonctionner l'application correctement: ça, j'en suis 100 pour cent sûr.

    Et puis, le servlet qui traite la requête et la réponse et qui fait partie de modèle (M) dans MCV n'a jamais la vocation de faire lire le jsp ou html qui fait partie de vue (V). D'ailleurs, l'inverse est aussi vrai. Il n'est jamais question a priori de faire lire un fichier jsp ou html résidant dans le serveur, pas pour servir au client, mais pour trouver quelque donnée là dedans: il peut le faire, en fin de compte, tous les codes résident dans le serveur, n'est-ce pas, mais c'est bête de concevoir quelque chose de ce genre.

    Pour créer un xml d'après ce que voit le client, et entre les données dynamiquement et puis le client fait passer les données au serveur pour faire quelque selon le désigne de l'application même; c'est tout à fait légitime et c'est ce qu'il pouvait faire via ajax ou non. Donc, l'ensemble du code déjà montré, en principe, n'est pas bête du tout! Seulement, il faut le faire correctement, c'est tout.

    Je peux te montrer comment pour un cas simplificateur.

    Suppose data est dynamiquement passer de la part de client au serveur. Et data contient un simple texte "nom dynamique" que tu veux utiliser pour créer l'attribut name.

    Dans le servlet, doPost(), tu fait comme ça.

    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
            protected void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
                String path = request.getServletPath();
     
                if (path.equals("/CreationXML")) {
     
                    //on verifie si le paramètre "data" est défini... ici, je fais economie et suppose tout passe bien.
                    String data=request,getParameter("data");
     
                    /* Création de la racine */
                    Element racine = new Element("airbus");
     
                    //etc etc (les mêmes lignes)...
     
                    //Attribute att = new Attribute("name", "TypeFus Pax Floor");
                    Attribute att = new Attribute("name", data);    // ici le changement fonctionnel et il résulte un attribut name='nom dynamiqueù
                    area.setAttribute(att);
     
                    //etc etc (les mêmes lignes)...
     
                }
     
                //etc etc (les mêmes lignes)...
     
            }
    Et puis, le côté client:
    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
     
    jQuery(document).ready(function($){
     
        $("#creationXML").click(function(e){    //changement essentiel
            e.preventDefault();    //changement essentiel
            var res = "";
            var message = "You can find the XML File on your desktop !  "; 
     
            $.ajax({
                url : 'AffichageXML',
                type : 'POST',
                dataType: 'html',
                //data : {data : JSON.stringify(res)},
                data : {data : 'nom dynamique'},    //changement pour un cas simplificateur
                success : function(returnData) {
                    $('#zone').html(returnData);    //changement si on veut, ce n'est pas essentiel.
                }
            });
            /*console.log(res);*/
            //alert(res + "\n\n" + message + "\n");
        });
     
    });
    Le texte 'nom dynamique' pourrait provenir d'une entrée d'un cellule d'un tableau ou n'importe où souhaité - ici un simple texte fixe pour une démonstration. Pour le cas où on veut passer plus qu'une donnée par une chaîne de caractères type json, on le fait analyser le json posté au côté serveur pour sortir ce qu'il est attendu pour l'attribut name, et d'autres.

    Voilà ce que j'ai à dire, et c'est possible que c'est ma dernière intervention. Ce fait beaucoup d'issues à prendre soin et si tu n'est pas prêt pour ça, c'est effectivement un peu difficile.

  4. #44
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 106
    Points : 27
    Points
    27
    Par défaut Réponse aux commentaires
    Comme je m'y connais pas trop en JavaScript, je vais te montrer ce que je souhaite obtenir. Pour cela je vais te montrer ma JSP et le résultat en XML que je souhaite obtenir, ainsi tu pourras un peu m'aiguiller :

    Mon JSP :
    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
    <tbody>
    				<c:forEach items="${modele.listeTroisTable}" var="xml">
    					<tr> 
    						<!-- <td>${xml.area}</td> ***** Avant de mmettre td class="" -->
    						<!-- LE 17/04 : TEST avec : 'td name="" ' -> ON NE PEUT PAS METTRE NAME, on peut mettre que CLASS="" -->
    						<td class="area">${xml.area}</td>
    						<td class="position">${xml.position}</td>
    						<td class="elecroute">${xml.elecroute}</td>
    						<td class="bsolution1">${xml.bsolution1}</td>
    						<td class="bsolution2">${xml.bsolution2}</td>
    						<td class="bsolution3">${xml.bsolution3}</td>
    						<td class="bsolution4">${xml.bsolution4}</td>
    						<td class="bsolution5">${xml.bsolution5}</td>
    						<td class="ref">${xml.ref}</td>
    						<td class="partsRef1">${xml.partsRef1}</td>
    						<td class="partsRef2">${xml.partsRef2}</td>
    						<td class="partsRef3">${xml.partsRef3}</td>
    						<td class="partsRef4">${xml.partsRef4}</td>
    						<td class="partsRef5">${xml.partsRef5}</td>
    						<td class="partsRef6">${xml.partsRef6}</td>
    						<td class="partsRef7">${xml.partsRef7}</td> 
    					</tr>
    				</c:forEach>
    			</tbody>
    Résultat XML attendu :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <airbus>
      <bracket id="1">
        <area name="TypeFus Pax Floor" />
        <position name="On Crossbeams" />
        <elecroute name="(59) Supplemental Cooling" />
        <bsolution name="E002-1">
          <picture path="E002-1.png" />
          <partsRef1 name="ABS1423JA32-1" />
          <partsRef2 name="ABS0998T2" />
          <partsRef3 name="ABS0999-2" />
          <partsRef4 name="ABS1339D01" />
          <partsRef5 name="NAS1149C0332R" />
          <partsRef6 name="NSA5191-3**" />
          <partsRef7 name="NSA935401-05" />
        </bsolution>
      </bracket>
    </airbus>
    Comment insérer aussi la 1ère ligne du fichier XML " <?xml version="1.0" encoding="UTF-8"?> "

    Merci d'avance pour tes éclaircissements. En attendant, je cherche de mon côté...

  5. #45
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 106
    Points : 27
    Points
    27
    Par défaut Réponse aux commentaires
    Je me suis rendu compte que finalement, la solution que tu m'a proposé en JavaScript récupère bien ce qu'il y a dans la JSP.
    Or, les données en "dur" dans une JSP, pour ma part je ne les ai pas car mes <td> se servent de mon modèle, qui ce dernier se sert du bean --> Fonctionnement classique en JEE.
    En effet, le bouton "Creer fichier XML", va lire dans ma servlet, qui elle, fait le traitement adéquate pour me créer un fichier XML bien indenté (comme je le souhaite), mais toujours avec des données en "dur" que j'ai mis dans ce code.
    Or, soit j'utilise une fonction spécifique dans ma servlet pour récupérer les valeurs de mes <td>, soit j'utilise de l'AJAX qui intéragit avec ma servlet !

    Dans le post précédent, on voit bien que dans la JSP, pour mon <c:foreach> -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:forEach items="${modele.listeTroisTable}" var="xml">
    Modele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<BeanXML> listeTroisTable = new ArrayList<BeanXML>();
    avec Getters et setters associés.

    Donc mon idée, c'est faire une fonction AJAX côté client(JSP), récupérer un résultat de cette fonction dans ma servlet. Et dans celle-ci, mettre en plus le code qui me permet déjà de créer mon fichier XML.

  6. #46
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function tableToXML(selector) {
    			var indent = "    "; // 4 espaces pour indenter
                var xml = "<table>\n";
    			$(selector) .find("tr").each(
    				function() {
    					xml += indent+"<row>\n";
    					$(this).find("td").each(
    						function() {
    							xml+= indent+indent+"<col>" + encodeAndEscapeXML($(this).html()) + "</col>\n";
    								   });  
    						xml += indent+"</row>\n";
    					} );
    			xml += "</table>";
    			return xml;
    		}


    J'ai déjà dit que c'était absurde que le client envoie des données au serveur alors que le serveur sait déjà les obtenir tout seul (puisque c'est ce qu'il fait déjà quand il génère, via la jsp, l'affichage). Et je t'ai déjà dit que je ne te donnerai pas de code pour implémenter ça. Bien sûr, tu fais ce que tu veux, et si tu t'entêtes à ce que le client envoie des données au serveur pour que le serveur les renvoie sous une autre forme (du xml indenté) au client :

    1. pour la partie client, tu poses la question sur le forum JavaScript ou JQuery : comment envoyer le contenu d'un table via un post ajax, en json par exemple, ou en csv, ou en ce que tu veux. D'ailleurs tu peux même l'envoyer en xml, en utilisant comme base de génération de ce xml ce que je t'ai donné comme code.
    2. pour la partie serveur, on t'a déjà donné le principe et des exemples de code, que tu dois adapter (on te t'écrira pas le code exact que tu dois faire). La seule chose qu'on ne t'a pas donné, c'est comment éventuellement récupérer des données dans le body de la requête (il suffit d'ouvrir le inputStream de la requête, et de le lire, puis de le parser comme tu le ferais pour un paramètre), mais si tu les passes en paramètre en post, tu as tout ce qu'il te faut (en get, ça pourrait poser un problème avec la longueur de l'URL). Après, pour parser, utiliser le parser adéquat (parser JSon pour du JSon (exemples : GSON, Jackson, jsonsimple, org.json), parser xml pour du xml (JDK StAX, JDOM...)...)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #47
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 106
    Points : 27
    Points
    27
    Par défaut Réponse aux commentaires
    Par rapport à ce que tu m'a dit concernant : "le serveur sait déjà les obtenir tout seul (puisque c'est ce qu'il fait déjà quand il génère, via la jsp, l'affichage)" --> Non ma servlet ne sait pas obtenir les lignes affichées ! Les lignes qui s'affichent interroge la BDD avec une requête en prenant en compte les filtres des 2 labels.

    Par rapport au post de tsuji du 19/04 à 17h16, j'ai essayé cette solution mais ca le console m'affiche "Can not set a null value for an Attribute" ! Je ne vois pas pourquoi ? Ci-dessous mon code :
    SERVLET :
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    /* On récupère les data du JS , de la requête AJAX */
    			String data = request.getParameter("data"); /* ca fonctionne en mode debug */
     
    			/* Création de la racine */
    			Element racine = new Element("airbus");
     
    			/* Création d'un doc basé sur la racine */
    			Document document = new Document(racine);
     
    			Element bracket = new Element("bracket");
    			racine.addContent(bracket);
     
    			/* Traitement pour rajouter les attributs aux divers Elements */
    			Attribute attribut1 = new Attribute("id", "1");
    			bracket.setAttribute(attribut1);
     
    			Element area = new Element("area");
    			bracket.addContent(area);
    			Attribute att = new Attribute("name", data);
    			area.setAttribute(att);
     
    			Element position = new Element("position");
    			bracket.addContent(position);
    			Attribute pos = new Attribute("name", data);
    			position.setAttribute(pos);
     
    			Element elecroute = new Element("elecroute");
    			bracket.addContent(elecroute);
    			Attribute el = new Attribute("name", data);
    			elecroute.setAttribute(el);
     
    			Element bsolution = new Element("bsolution");
    			bracket.addContent(bsolution);
    			Attribute bsolutionName = new Attribute("name", data);
    			bsolution.setAttribute(bsolutionName);
     
    			Element picture = new Element("picture");
    			bsolution.addContent(picture);
    			Attribute pic = new Attribute("path", data);
    			picture.setAttribute(pic);
     
    			Element partsRef1 = new Element("partsRef1");
    			bsolution.addContent(partsRef1);
    			Attribute part1 = new Attribute("name", data);
    			partsRef1.setAttribute(part1);
     
    			Element partsRef2 = new Element("partsRef2");
    			bsolution.addContent(partsRef2);
    			Attribute part2 = new Attribute("name", data);
    			partsRef2.setAttribute(part2);
     
    			Element partsRef3 = new Element("partsRef3");
    			bsolution.addContent(partsRef3);
    			Attribute part3 = new Attribute("name", data);
    			partsRef3.setAttribute(part3);
     
    			Element partsRef4 = new Element("partsRef4");
    			bsolution.addContent(partsRef4);
    			Attribute part4 = new Attribute("name", data);
    			partsRef4.setAttribute(part4);
     
    			Element partsRef5 = new Element("partsRef5");
    			bsolution.addContent(partsRef5);
    			Attribute part5 = new Attribute("name", data);
    			partsRef5.setAttribute(part5);
     
    			Element partsRef6 = new Element("partsRef6");
    			bsolution.addContent(partsRef6);
    			Attribute part6 = new Attribute("name", data);
    			partsRef6.setAttribute(part6);
     
    			Element partsRef7 = new Element("partsRef7");
    			bsolution.addContent(partsRef7);
    			Attribute part7 = new Attribute("name", data);
    			partsRef7.setAttribute(part7);
     
    			/* Enregistrement */
    			XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    			try {
    				sortie.output(document, new FileOutputStream("C:\\Doc_XML\\test2.xml"));
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
     
    			// System.out.println("Les données ont bien été récupérées ! ");
    		}
     
    		request.getRequestDispatcher("afficherXML.jsp").forward(request, response);
    Code JavaScript :
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    jQuery(document).ready(function($){
     
    $("#test2").click(function(){		/* '#creationXML' --> Récupère l'ID du <form action="CreationXML">  */
    	var res = "";
    	var message = "You can find the XML File in this directory: ' C:\Doc_XML' ";
    	var dict = [];
    	$('#table tbody > tr').each(function(){
     
    		var area= $(this).find(".area").html();
    		dict.push({key: 'area', value: area});
     
    		var position= $(this).find(".position").html();
    		dict.push({key:'position', value: position});
     
    		var elecroute= $(this).find(".elecroute").html();
    		dict.push({key:'elecroute', value: elecroute});
     
    		var bsolution1= $(this).find(".bsolution1").html();
    		dict.push({key:'bsolution1', value: bsolution1});
     
    		var bsolution2= $(this).find(".bsolution2").html();
    		dict.push({key:'bsolution2', value: bsolution2});
     
    		var bsolution3= $(this).find(".bsolution3").html();
    		dict.push({key:'bsolution3', value: bsolution3});
     
    		var bsolution4= $(this).find(".bsolution4").html();
    		dict.push({key:'bsolution4', value: bsolution4});
     
    		var bsolution5= $(this).find(".bsolution5").html();
    		dict.push({key:'bsolution5', value: bsolution5});
     
    		var ref= $(this).find(".ref").html();
    		dict.push({key:'ref', value: ref});
     
    		var partsRef1= $(this).find(".partsRef1").html();
    		dict.push({key:'partsRef1', value: partsRef1});
     
    		var partsRef2= $(this).find(".partsRef2").html();
    		dict.push({key:'partsRef2', value: partsRef2});
     
    		var partsRef3= $(this).find(".partsRef3").html();
    		dict.push({key:'partsRef3', value: partsRef3});
     
    		var partsRef4= $(this).find(".partsRef4").html();
    		dict.push({key:'partsRef4', value: partsRef4});
     
    		var partsRef5= $(this).find(".partsRef5").html();
    		dict.push({key:'partsRef5', value: partsRef5});
     
    		var partsRef6= $(this).find(".partsRef6").html();
    		dict.push({key:'partsRef6', value: partsRef6});
     
    		var partsRef7= $(this).find(".partsRef7").html();
    		dict.push({key:'partsRef7', value: partsRef7});
     
    		res += "area: " + area + "\n" + "position: " + position + "\n" + "elecroute: " + elecroute + "\n" + "bsolution1: " + bsolution1 + "\n"
    		+ "bsolution2: " + bsolution2 + "\n" + "bsolution3: " + bsolution3 + "\n" + "bsolution4: " + bsolution4 + "\n" +"bsolution5: " 
    		+ bsolution5 + "\n" +"ref: " + ref + "\n" +"partsRef1: " + partsRef1 + "\n" + "partsRef2: " + partsRef2 + "\n" + "partsRef3:"
    		+ partsRef3 + "\n" + "partsRef4: " + partsRef4 + "\n"
    		+ "partsRef5: " + partsRef5 + "\n" + "partsRef6: " + partsRef6  + "\n" + "partsRef7: " + partsRef7 ;
     
    	});
    	console.log(dict);
    	$.ajax({
    		url : 'AffichageXML',	/* Soit on POST vers un fichier(.php ; .... ou soit on peut mettre le nom de la servlet) */
    		type : 'POST',			/* je vais envoyer à la servlet les données du tableau pr créer dans la servlet(DoPost) le fichier XML */
    		dataType: 'application/xml',
    		//data : {data : JSON.stringify(res)},
    		//data : {data : XML.stringify(dict)},
    		data : {data : JSON.stringify(dict)},
    		success : function(returnData) {
     
    		}
    	});
     
    	/*console.log(res);*/
    	alert(res + "\n\n" + message + "\n");
      });
     
    });
    Erreur console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.NullPointerException: Can not set a null value for an Attribute

  8. #48
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fredbubu65 Voir le message
    Les lignes qui s'affichent interroge la BDD avec une requête en prenant en compte les filtres des 2 labels.
    Mais cette requête "filtrée" est bien exécutée par une servlet, non ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #49
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 106
    Points : 27
    Points
    27
    Par défaut Réponse aux commentaires
    Oui filtré par une servlet, qui fait appel à une méthode DAO qui sélectionne les données en BDD avec un where champs1 LIKE ? & champs2 LIKE ?
    Donc les pt d'interrogations sont ce que va rentrer l'utilisateur côté client.

  10. #50
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fredbubu65 Voir le message
    Oui filtré par une servlet, qui fait appel à une méthode DAO qui sélectionne les données en BDD avec un where champs1 LIKE ? & champs2 LIKE ?
    Donc les pt d'interrogations sont ce que va rentrer l'utilisateur côté client.
    Donc, c'est bien ce que je disais : ce qui est affiché en html est généré par une servlet

    Si cette servlet peut générer du html, un servlet similaire peut générer n'importe quoi comme format !

    Par exemple, si dans une jsp (une jsp c'est une servlet, enfin, c'est interprétée/(compilée/)exécutée par une servlet donc c'est pareil ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tr><td> <%= machintruc.getBidule() %> </td></tr>
    on peut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <machin><truc> <%= machintruc.getBidule() %> </truc></machin>

    Ou si on a dans un code de javax.servlet.http.HttpServlet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      htmlWriter.tr().td( machintruc.getBidule() );
    on peut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     xmlWriter.element("machin").element("truc").text(machintruc.getBidule());
    ou n'importe quel autre code qui génère d'une part du html et de l'autre du xml, quelque soit l'API pour l'un ou pour l'autre, avec les mêmes données en entrée, qui proviennent du DAO par la même requête obtenu avec les mêmes paramètres récupérées d'une instance de HttpServletRequest correspondant à une requête de client.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #51
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    jQuery(document).ready(function($){
     
    $("#test2").click(function(){		/* '#creationXML' --> Récupère l'ID du <form action="CreationXML">  */
    	var res = "";
    Citation Envoyé par moi-même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    jQuery(document).ready(function($){
     
        $("#creationXML").click(function(e){    //changement essentiel
            e.preventDefault();    //changement essentiel
            var res = "";
    Comment veut-tu que le code marche?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* On récupère les data du JS , de la requête AJAX */
    			String data = request.getParameter("data"); /* ca fonctionne en mode debug */
    Comment savoir que ça fonctionne ? Il faut verifier avec évidence pour dire ça.

  12. #52
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 106
    Points : 27
    Points
    27
    Par défaut Réponse aux commentaires
    En fait, maintenant ca fonctionne, j'y suis presque, avec le code que je vais mettre ci-dessous, mais en fait pas complètement non plus.
    En fait, ce que je voudrais c'est que dans le code de ma servlet je récupère les :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var partsRef7= $(this).find(".partsRef7").html();
    dict.push({key:'partsRef7', value: partsRef7});
    Dans ma servlet, j'ai mis ca, mais ca me créer le fichier XML avec les valeurs que j'ai mis dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Attribute att = new Attribute("name", data.valueOf(0));
    dans la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Element area = new Element("area");
    bracket.addContent(area);
    Attribute att = new Attribute("name", data.valueOf(0));
    area.setAttribute(att);
    Ca affiche dans mon fichier XML :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <airbus>
      <bracket id="1">
        <area name="0" />
        <position name="1" />
        <elecroute name="2" />
        <bsolution name="3">
          <picture path="4" />
          <partsRef1 name="5" />
          <partsRef2 name="5" />
          <partsRef3 name="6" />
          <partsRef4 name="7" />
          <partsRef5 name="8" />
          <partsRef6 name="9" />
          <partsRef7 name="10" />
        </bsolution>
      </bracket>
    </airbus>
    ???

  13. #53
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 106
    Points : 27
    Points
    27
    Par défaut Réponse aux commentaires
    Je vais clôturer ce post car j'ai trouvé la solution. En fait, en javascript j'arrive à récupérer mes lignes de mon tableau et à produire mon XML. Je vais mettre le code comme ça, cela pourrav servir à quelqu'un d'autres.

    Script JS :

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    <script type="text/javascript">
                        function encodeAndEscapeXML(string) { 
                                if ($.trim(string) != "") {
                                   /*string = string.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, """).replace(/'/g, "'");*/
                                    string = string.replace(/&(?!(amp;)|(lt;)|(gt;)|(quot;)|(#39;)|(apos;))/g, "&amp;");
                                    string = string.replace(/([^\\])((\\\\)*)\\(?![\\/{])/g, "$1\\\\$2");  //replaces odd backslash(\\) with even.
                                }
                                else {
                                    string = "";
                                }
                            return string;
                        }
                            function tableToXML(selector) {
                				var indent=" ";
                				var backslah="\n";
                            	var xml = "<airbus>";	
                            	var bracket = xml += backslah +""; /* "<bracket id>"  */
                            $(selector) .find("tr").each(
                                    function() {
    										if(bracket[0]){
    											bracket = xml+= backslah +"<bracket id='1'>";
     
                                            $(this).find("td.area").each(
                                                    function() {
                                                            xml+= backslah + "<area name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                                    }); 
     
                                            $(this).find("td.position").each(
                                            		function(){
                                            			xml+= backslah + "<position name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.elecroute").each(
                                            		function(){
                                            			xml+= backslah + "<elecroute name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.bsolution1").each(
                                            		function(){
                                            			xml+= backslah + "<bsolution1 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.bsolution2").each(
                                            		function(){
                                            			xml+= backslah + "<bsolution2 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.bsolution3").each(
                                            		function(){
                                            			xml+= backslah + "<bsolution3 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.bsolution4").each(
                                            		function(){
                                            			xml+= backslah + "<bsolution4 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.bsolution5").each(
                                            		function(){
                                            			xml+= backslah + "<bsolution5 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.ref").each(
                                            		function(){
                                            			xml+= backslah + "<ref name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef1").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef1 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef2").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef2 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef3").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef3 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef4").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef4 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef5").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef5 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef6").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef6 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
                                            $(this).find("td.partsRef7").each(
                                            		function(){
                                            			xml+= backslah + "<partsRef7 name=" + "'" + encodeAndEscapeXML($(this).html()) + "'" + " />"; 
                                            		});
     
     
                                                   xml += backslah +"<bracket id='1'>";
    									} /* Fin di if */   
                                            });
     
                            xml += "\n</airbus>"; 
                            return xml;
                    	} 
     
            function saveXMLFile (name, data) {
                    saveFile(name, 'text/xml, application/xml', data);
            }
            function saveFile (name, type, data) {
                                if (data != null && navigator.msSaveBlob)
                                    return navigator.msSaveBlob(new Blob([data], { type: type }), name);
                                var $a = $("<a style='display: none;'/>");
                                var url = window.URL.createObjectURL(new Blob([data], {type: type}));
                                $a.attr("href", url);
                                $a.attr("download", name);
                                $("body").append($a);
                                $a[0].click();
                                window.URL.revokeObjectURL(url);
                                $a.remove();
                    }
            $( document ).ready(function() {
     
     
                    $("#test1").click(function() {
                            saveXMLFile("XmlFileToCatia.xml", tableToXML("#table"));
     
                    });
     
     
                    });
     
    </script>

  14. #54
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fredbubu65 Voir le message
    cela pourrav servir
    C'est un lapsus révélateur...

    A noter, qu'il y a (au moins) une erreur dans ce code et pour savoir laquelle, lire ce post.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/01/2019, 21h23
  2. Afficher un fichier XML avec fonction JavaScript
    Par nicolas00123 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/01/2013, 13h27
  3. Réponses: 1
    Dernier message: 11/04/2012, 17h14
  4. Filtrer un fichier XML à l'aide d'un tableau
    Par LaBastoss dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 26/05/2011, 18h11

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