Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sax - Considérer des balises comme du texte

Sujet résolu
    10 février 2009 à 23:53:13

    Bonjour,
    Pour mon projet de java je dois utiliser SAX pour parser des flux RSS/Atom et je rencontre un petit problème. Sur l'un des flux proposés par notre prof, le contenu des balises <summary> contient du texte avec des balises html. Savez-vous comment je peux m'y prendre pour récupérer directement le contenu de ces balises <summary> avec les balises html incluses sans que celles-ci ne soient interprétées comme des événements par Sax ?

    Un exemple tiré d'un flux Atom :
    <summary type="xhtml">
    <div xmlns="http://www.w3.org/1999/xhtml">I am going to brag for just a second?
    After I updated my system to F-10, I rebooted and sound worked without any further tinkering. WAIT? that?s not all. I plugged-in my cellphone, and Fedora immediately recognized that it had a camera on it, and I was able to transfer to/from my phone without any further [...]</div>
    </summary>
    

    Moi je voudrai pouvoir récupérer tout :
    <div xmlns="http://www.w3.org/1999/xhtml">I am going to brag for just a second?
    After I updated my system to F-10, I rebooted and sound worked without any further tinkering. WAIT? that?s not all. I plugged-in my cellphone, and Fedora immediately recognized that it had a camera on it, and I was able to transfer to/from my phone without any further [...]</div>
    


    Comme du texte sans que ne soit interprétée la balise <div>

    Avez-vous une idée de la manière dont je peux m'y prendre ?

    D'avance merci !
    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2009 à 18:06:19

      p'tit up !
      Vraiment pas d'idée pour faire en sorte que sax n'interprète pas certaines balises ?
      Mon projet est à rendre lundi, ça me débloquerai ÉNORMÉMENT si je pouvais résoudre ce problème...

      D'avance merci !
      • Partager sur Facebook
      • Partager sur Twitter
        11 février 2009 à 18:10:19

        ben ^^ c'est pas du java ....
        sauf si SAX est une librairie java =/

        peut être sur un forum plus spécialisé :o
        dans tous les cas je ne peux rien faire de plus que toi ^^
        je sais même pas ce que c'est :p
        • Partager sur Facebook
        • Partager sur Twitter
          11 février 2009 à 18:13:33

          Heu en fait SAX est une librairie java...

          [Edit] non en fait... ça fait partie de java
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            11 février 2009 à 18:58:46

            salut!
            premièrement @ to Snooooopy c du JAVA
            @to huit_six , perso j'utilise jdom pour parser les fichiers xml,qui est basé sur la technique des filtres, voilà un bon lien pour débuter avec Jdom

            et encore pour récupérer le contenu d'une balise bien précise tu peux utiliser le XPATH
            SAXBuilder saxbul = new SAXBuilder();
                   try
                   {
                      document = saxbul.build(new File(name));
                   }
                   catch(Exception e){}
            
            racine = document.getRootElement();
            Element elem=(Element) XPath.selectSingleNode(racine, "//summary"); 
            contenuattribut=elem.getAttributeValue("type");
            

            voila , j'espère que ça aide un peu
            bonne chance


            Edit: faute de frappe
            • Partager sur Facebook
            • Partager sur Twitter
              11 février 2009 à 18:59:15

              hein ? partie de la librairie de base de java alors :p
              jamais entendus parler ^^
              • Partager sur Facebook
              • Partager sur Twitter
                11 février 2009 à 21:24:40

                @Snooooopy : ça fait partie de jaxp au même titre que dom et stax et ce depuis java 5
                @nanona : En fait l'utilisation de sax m'est imposée (personnellement j'aurais plutôt utilisé stax mais bon...) de plus comme ce sont des flux de taille quelconque que je dois pouvoir parser une solution "à la dom" serait trop gourmande

                J'ai beau fouiller sur le net, je ne trouve rien qui permette d'interrompre l'interprétation des balises...
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  11 février 2009 à 21:43:42

                  salut!

                  Citation : nanona

                  et encore pour récupérer le contenu d'une balise bien précise tu peux utiliser le XPATH

                  SAXBuilder saxbul = new SAXBuilder();
                         try
                         {
                            document = saxbul.build(new File(name));
                         }
                         catch(Exception e){}
                  
                  racine = document.getRootElement();
                  Element elem=(Element) XPath.selectSingleNode(racine, "//summary"); 
                  contenuattribut=elem.getAttributeValue("type");
                  





                  interrompre........ ? ça nécessite une explication
                  détaille un peu , ce que tu veux
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 février 2009 à 9:35:05

                    En fait je veux qu'à partir du moment où il rencontre une balise ouvrante summary, il interprète toute la suite comme des événements character et ce, jusqu'à la balise fermante summary. De telle sorte que quand il rencontre la balise <div>, il génère un (ou des) événements textes et pas un événement startElement.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 février 2009 à 10:29:24

                      apres un bref tour sur la doc :o
                      (j'suis pas sur de ce que je dis )


                      public SAXBuilder(java.lang.String saxDriverClass)

                      Creates a new SAXBuilder using the specified SAX parser.

                      je suppose que le parseur c'est ce qui analyse ... (mais tj pas plus sur j'ai pas encore lut l'explication de la page mais la je vai bosser :s )
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        13 février 2009 à 9:15:46

                        salut huit_six
                        j'aimerai bien t'aider mais je n'ai jamais utilisé le SAX
                        j'ai cherché sur internet ,j n'ai même pas compris les codes de Sax
                        peux tu commenter ce code si t'as du temps bien sur
                        import javax.xml.parsers.SAXParser;
                        import javax.xml.parsers.SAXParserFactory;
                        
                        import org.xml.sax.Attributes;
                        import org.xml.sax.SAXException;
                        import org.xml.sax.helpers.DefaultHandler;
                        
                        public class NameLister {
                        
                          public static void main(String args[]) {
                        
                            if (args.length != 1) {
                              System.err.println("Usage: java NameLister xmlfile.xml");
                              System.exit(-1);
                            }
                        
                            try {
                        
                              SAXParserFactory factory = SAXParserFactory.newInstance();
                              SAXParser saxParser = factory.newSAXParser();
                        
                              DefaultHandler handler = new DefaultHandler() {
                                boolean name = false;
                        
                                public void startElement(String uri, String localName,
                                    String qName, Attributes attributes)
                                    throws SAXException {
                                  if (qName.equalsIgnoreCase("NAME")) {
                                    name = true;
                                  }
                                }
                        
                                public void characters(char ch[], int start, int length)
                                    throws SAXException {
                                  if (name) {
                                    System.out.println("Name: "
                                        + new String(ch, start, length));
                                    name = false;
                                  }
                                }
                              };
                        
                              saxParser.parse(args[0], handler);
                        
                            } catch (Exception e) {
                              e.printStackTrace();
                            }
                          }
                        }
                        

                        bon courage :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 février 2009 à 18:01:34

                          Merci quand même beaucoup d'avoir essayé, il semblerait que je me sois pris la tête pour rien, en fait apparemment je dois juste ignorer les balises et reconstituer le texte comme si elles n'étaient pas là...
                          Mais j'avoue que le mystère reste entier et que ça me surprend que sax ne propose pas une solution simple pour faire ce que je voulais.

                          J'avais bien trouvé une solution du coté des filtres mais ça me paraît être un peu de l'artillerie lourde, ça consiste à transformer les événements startElement en événements character avant que le traitement par le handler ne soit appliqué...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            13 février 2009 à 18:34:18

                            avec les filtres on peut bouger quand même ;)
                            l'idée est simple, tu crées un filtre qui filtre toute les balises summary dont le résultat est une liste, ensuite pour tout élément de la liste(une balise ouvrante summary ) il effectue le traitement suivant :
                            il lit toute balise child et la réécrit immédiatement par new Element
                            idem pour les attributs des balises
                            bonne continuation :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 février 2009 à 12:25:28

                              Bon, en fait c'était bien ce que je pensais, il y avait une solution très simple :
                              L'événement character généré par le parseur sax envoie en paramètres au handler un tableau de caractères avec les indices du premier et du dernier caractère de l'événement. Mais en fait ce que je savais pas c'est que ce tableau contient TOUT le fichier xml, donc il suffit de mémoriser l'indice du premier caractère et du dernier caractère qui nous intéressent et de récupérer tout ce qui se trouve entre ces positions, ce qui incluera les balises éventuelles.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Sax - Considérer des balises comme du texte

                              × 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