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 :

lire un string avec jxpath


Sujet :

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut lire un string avec jxpath
    bonjour,

    je n'arrive pas à lire un String qui contient du xml (valide ou pas) avec jxpath.
    Mon problème est que je n'arrive pas à définir le jxpathContext.
    Quelqu'un pourrait m'aider ?

    Merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    jxpath ne parse pas de XML, c'est juste un moteur xPath, pas XML.

    Utilise plutôt JDOM pour parser ton XML et extraire le texte que tu cherches.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut
    jxpath permet bien d'extraire des informations en utilisant les xpath.
    Le getValue par exemple permet d'évaluer un xpath et d'en retourner la valeur.

    getValue(String xpath)
    Evaluates the xpath and returns the resulting object.

    Tout mon code est déjà fait, il ne me reste que le context où j'ai pas bien compris le fonctionnement.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par viboudr Voir le message
    jxpath permet bien d'extraire des informations en utilisant les xpath.
    J'ai pas dit le contraire.

    J'ai dit qu'il ne parse pas de XML. Si tu as une String qui contient du XML, il faut d'abord le parser en une hiérarchie d'objets. Une fois cela fait, jxpath te permettra de sélectionner des choses dans cette hiérarchie, avec des expressions xPath.

    En résumé, jxpath sert à appliquer des expressions xPath sur n'importe quelle structure hiérarchique de POJOs, et pas seulement sur du DOM. Autrement dit ça permet d'utiliser xPath là où il n'est pas question de XML.
    S'il est question de XML, alors jxpath n'est pas ce qu'il te faut. (Cas particulier : jxpath est particulièrement utile pour sélectionner quelque chose qui est dans une structure DOM qui est elle-même dans une structure Java. C'est tout de même assez rare.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut
    et je ne pourrais pas utiliser DocumentContainer de jxpath pour parser mon XML et créer mon context ?

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut
    Trouvé
    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
     
    JXPathContext context;
          try {
             org.w3c.dom.Document doc;
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
             dbf.setIgnoringComments(false);
             dbf.setIgnoringElementContentWhitespace(false);
             dbf.setValidating(false);
     
             DocumentBuilder db = null;
             try {
                db = dbf.newDocumentBuilder();
             }catch (javax.xml.parsers.ParserConfigurationException e){
                return null;
             }
     
             InputSource is = new InputSource(new ByteArrayInputStream(root.getBytes()));
     
             try {
                doc = db.parse(is);
             }catch (org.xml.sax.SAXException e){
                return null;
             }catch (java.io.IOException e){
                return null;
             }
     
             context = JXPathContext.newContext(doc);
     
          } catch (JXPathException e){
             return null;
          }
          return context;
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import org.xml.sax.InputSource;
    import javax.xml.parsers.*;

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    ... Si tu préfères ça à JDOM, tant mieux pour toi je suppose...

    Même chose :

    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
    try {
      // Parser
      SAXBuilder builder = new SAXBuilder();
      Reader readerRoot = new StringReader(root);
      Document doc = builder.build(readerRoot);
     
      // Extraire l'élément voulu avec xPath
      Element element = (Element)XPath.selectSingleNode(doc, "/ce/que/je/cherche[@type='ok']");
      // Prendre la valeur texte de la sélection xPath.
      return element.getValue();
     
    } catch (JDOMException e) {
      e.printStackTrace();
      return null;
    } catch (IOException e) {
      e.printStackTrace();
      return null;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Par défaut
    j'ai une contrainte de devoir absolument utiliser jxpath.

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/01/2015, 15h08
  2. RegEx pour lire une string avec des lignes
    Par Bacube dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/05/2012, 16h20
  3. Réponses: 3
    Dernier message: 22/07/2009, 19h09
  4. [XPATH] lire un xml avec JXPATH
    Par nalvon dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/01/2008, 11h33
  5. string avec Dev-C++ 4
    Par Shadow Blade dans le forum Dev-C++
    Réponses: 15
    Dernier message: 20/03/2003, 18h50

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