Partage
  • Partager sur Facebook
  • Partager sur Twitter

Caractère < et > en Java pour commentaire XML

Sujet résolu
    20 mars 2018 à 13:09:50

    Bonjour, je suis depuis quelque jours plusieurs cours sur le langage XML, le langage Java ainsi que l'adaptation entre XML et Java.

    Mon objectif est de créer un fichier XML grâce à un programme Java. J'arrives à créer ce même fichier, je me le suis approprier en rajoutant des noeuds, des attributs, des éléments, et le fait que l'on écrives quelque chose dans la console et cette même chose s'inscris dans le fichier XML cependant, je suis bloqué pour inscrire des commentaires. 

    C'est la seule chose qui me manque. 

    J'ai suivi le tableau donné dans le cours mais je n'arrive pas à bien utiliser cela : 

    Dans mon fichier XML, je me retrouve avec le résultat suivant : 

    1
    &amp;lt; Configuration machine &amp;gt;

    cependant, je voudrais un résultat comme ça : 

    1
    <!--Configuration machine-->

    De plus, une autre questions (facultative) : comme je le disais plus haut, j'ai réussi à mettre la valeur que l'on écris, dans la console, pour un attribut, cependant, j'aimerais savoir si on peux demander à l'utilisateur d'écrire un mot, Java reconnait ce mot et le modifies en une valeur.

     Pour exemple : l'utilisateur écris Pierre, Java nous retransmets 0.

    L'utilisateur écris Paul, Java nous retransmets 1.

    L'utilisateur écris Jacques, Java nous retransmets 2.

    [EDIT Premier problème]

    Je persiste sur ce premier problème et j'ai essayer plusieurs solutions : 

    • Définir des variables String qui sont composés du caractère voulu, puis dans ma ligne de commande je mets le nom de cette variable mais rien ne change.
    • Définir des variables char qui sont composés du caractère voulu en format héxadécimal et en format binaire, une seconde fois, mais toujours le même problème.
    • J'ai remplacer ce signe par un inférieur ou égal, ça a fonctionner mais du coup mon document XML n'est plus valide et n'est pas utilisable.

    -

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2018 à 13:31:03

      Pour les deux points cela va dépendre de comment tu lit/écrit ton XML, normalement les commentaires en XML non pas besoin d'être échapper, tu peux juste écrire <!-- Ton message -->
      • Partager sur Facebook
      • Partager sur Twitter
        21 mars 2018 à 11:08:08

        Oui je peux écrire mes commentaires comme ça dans mon XML, cependant mon projet est de concevoir un fichier XML grâce à Java, donc sans toucher ce fichier XML. Une fois qu'il est généré, il est envoyé quelque part et puis on y touche plus (ou en lecture seule).

        Sauf que justement, pour que la personne qui lises ce document (en lecture seule), il aurai été mieux de mettre des commentaires dans ce fichier (toujours grâce à Java). 

        Cependant, comme je l'ai dis plus haut les caractères < et > sont interdits dans Java. Et l'entité qui doit remplacer ce signe ne fonctionne pas.

        • Partager sur Facebook
        • Partager sur Twitter
          21 mars 2018 à 13:01:34

          Cela dépend de la méthode d'écriture.

          EDIT: Typiquement: https://stackoverflow.com/questions/6869384/add-comment-programatically-to-xml

          -
          Edité par florent m 21 mars 2018 à 13:25:08

          • Partager sur Facebook
          • Partager sur Twitter
            21 mars 2018 à 15:09:16

            J'ai déjà essayé ce système. ça corresponds à l'écriture de mes élements et mes attributs, je pense que ça peux fonctionner mais il doit manquer un petit truc car j'ai cette erreur là : 

            Exception in thread "main" java.lang.NullPointerException

            at Main.main(Main.java:206)

            206 étant la ligne où je mets le commentaire.

            Voici comment je déclare/écris mes éléments : 

            Element 1 = xml.createElement("1");
            Element 2= xml.createElement("2");
            Element 3= xml.createElement("3");



            -
            Edité par tomlrt 21 mars 2018 à 15:09:27

            • Partager sur Facebook
            • Partager sur Twitter
              21 mars 2018 à 15:33:28

              tomlaratte a écrit:

              J'ai déjà essayé ce système. ça corresponds à l'écriture de mes élements et mes attributs, je pense que ça peux fonctionner mais il doit manquer un petit truc car j'ai cette erreur là : 

              Exception in thread "main" java.lang.NullPointerException

              at Main.main(Main.java:206)

              206 étant la ligne où je mets le commentaire.

              Montre le code.

              • Partager sur Facebook
              • Partager sur Twitter
                21 mars 2018 à 16:01:25

                Je ne peux pas montrer mon propre code car c'est un projet d'entreprise mais je peux te montrer un code qui ressemble à ce que j'ai fais (code du cours : Java et XML) Il y a les ajouts de ce que j'ai fais aussi (pour le commentaire). 

                import javax.xml.parsers.DocumentBuilder;
                import javax.xml.parsers.DocumentBuilderFactory;
                import javax.xml.parsers.ParserConfigurationException;
                import javax.xml.transform.OutputKeys;
                import javax.xml.transform.Transformer;
                import javax.xml.transform.TransformerConfigurationException;
                import javax.xml.transform.TransformerException;
                import javax.xml.transform.TransformerFactory;
                import javax.xml.transform.TransformerFactoryConfigurationError;
                import javax.xml.transform.dom.DOMSource;
                import javax.xml.transform.stream.StreamResult;
                
                import org.w3c.dom.DOMException;
                import org.w3c.dom.Document;
                import org.w3c.dom.Element;
                import org.w3c.dom.Comment; // ajout de ma part pour les commentaires
                
                public class Main {
                
                   public static void main(String[] args) {
                      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                
                      try {
                         DocumentBuilder builder = factory.newDocumentBuilder();
                         
                         //la première chose qui change, nous n'allons pas lire un fichier
                         //mais nous allons en créer un de toutes pièces
                         Document xml = builder.newDocument();
                         
                         //Création de notre élément racine
                         Element root = xml.createElement("bibliotheque");
                         
                         //ensuite nous créons tous les nœuds de notre fichier XML
                
                         Element trunk = xml.createElement("livre");
                         trunk.setAttribute("auteur", "M@teo21");
                
                         Element element = xml.getDocumentElement();
                    	 Comment comment = xml.createComment("This is a comment");
                         element.getParentNode().insertBefore(comment, trunk2); //ajout de ma part 
                         
                         Element trunk2 = xml.createElement("livre");
                         trunk2.setAttribute("auteur", "cysboy");
                         
                         Element branche = xml.createElement("titre");
                         branche.setTextContent("Apprenez à programmer en C");
                         
                         Element branche2 = xml.createElement("titre");
                         branche2.setTextContent("Apprenez à programmer en Java");
                         
                         //Nous lions les nœuds les uns aux autres pour faire notre structure XML
                         //nous ajoutons donc les nœuds "titre" aux nœuds "livre"
                         trunk.appendChild(branche);
                         trunk2.appendChild(branche2);
                         
                         //nous ajoutons donc les nœuds "livre" aux nœuds "bibliothèque"
                         root.appendChild(trunk);
                         root.appendChild(trunk2);
                                     
                         //On crée un fichier xml correspondant au résultat
                         //construire la transformation inactive
                         Transformer t = TransformerFactory.newInstance().newTransformer();
                         //définir les propriétés de sortie pour obtenir un nœud DOCTYPE
                         t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "maDtdBibon.dtd");
                         t.setOutputProperty(OutputKeys.INDENT, "yes");
                         // appliquer la transformation 
                         String resultFile = "monTest.xml"; 
                         StreamResult XML = new StreamResult(resultFile);
                         
                         t.transform(new DOMSource(root), XML);       
                         
                      } catch (DOMException e) {
                         e.printStackTrace();
                      } catch (ParserConfigurationException e) {
                         e.printStackTrace();
                      } catch (TransformerConfigurationException e) {
                         e.printStackTrace();
                      } catch (TransformerFactoryConfigurationError e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                      } catch (TransformerException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                      }       
                   }
                }

                Lorsque j'exécute ce programme, la même erreur survient.

                [EDIT] : J'ai résolu le problème grace a cet exemple de programme : https://www.programcreek.com/java-api-examples/org.w3c.dom.Comment

                Merci quand même ! 

                -
                Edité par tomlrt 22 mars 2018 à 8:25:26

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mars 2018 à 8:55:59

                  Deux chose:

                  premièrement tu fait référence à trunk2 avant de le créer ligne 40, donc ça ne peux pas compiler

                  En suite ton problème est que tu ne peux pas utiliser getParentNode si tu n'a pas ajouté ton élément à un node, car sinon tu n'a pas de parent, d'ou le NullPointerException.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Caractère < et > en Java pour commentaire XML

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown