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 :

XPath + JDOM --> XPath + DOM [XPATH]


Sujet :

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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut XPath + JDOM --> XPath + DOM
    Bonjour,

    J'utilise JDOM et org.jdom.xpath.XPath dans mon projet.

    Je viens de m'apercevoir que l'interface org.jdom.xpath.XPath ne retourne que des nodeset et ne permet pas de retourner des String calculées par la fonction XSL number(nodeset) par exemple.

    Par contre l'interface javax.xml.xpath.XPath qui utilise DOM, le permet via la méthode javax.xml.xpath.xPathExpression.evaluate.
    J'ai la solution de convertir mon JDOM en DOM pour cette unique occasion mais est ce que j'ai d'autres possibilités ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <A>
    	<B>...</B>	
    	<B>...</B>	
    	<B>...</B>	
    	<B>...</B>	
    	<section> ...</section>			
    </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
     
    private String calculeNombreB(Element section) {
     
    	String nombreDeBaliseB = "";
     
    	javax.xml.xpath.XPathFactory xPathFactory = null;
    	javax.xml.xpath.XPath xpath = null;
     
     
    	xPathFactory  = XPathFactory.newInstance();
    	xpath = xPathFactory.newXPath();
    	String expression = "number(preceding-sibling::B)";
     
    	javax.xml.xpath.XPathExpression xPathExpression;
     
    	try {
    		xPathExpression = xpath.compile(expression);
                    //L'element section doit être une element Dom et non Jdom comme dans mon cas
    		nombreDeBaliseP = (String) xPathExpression.evaluate(section, XPathConstants.STRING);
    	} catch (XPathExpressionException e1) {
    		e1.printStackTrace();
    	}
    	return 	nombreDeBaliseB;
    }
    Résultat attendu >> nombreDeBalise B="4"

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Au lieu de faire une telle conversion JDOM -> DOM, j'utilise la méthode ci-dessous.

    Si quelqu'un à des informations sur l'utilisation des fonctions xpath (number, sum, ...) en conjonction avec le modèle JDOM, je suis preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	private String calculeNombreB(Element section) {
     
    		XPath xpath = null;
    		String patternXpath = "preceding-sibling::section" ;
     
    		try {	
    			xpath  = XPath.newInstance(patternXpath);		
    			List liste = xpath.selectNodes(section);
    		}
    		catch (JDOMException e) {
    			e.printStackTrace();
    		}
                    return ""+ liste.size();
    	}

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par brnspdl Voir le message
    Je viens de m'apercevoir que l'interface org.jdom.xpath.XPath ne retourne que des nodeset
    Nieh ?

    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
    public static void main(String[] args) {
      try {
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(new StringReader("<root>28</root>"));
     
        Number nCountRoot = (Number)XPath.selectSingleNode(doc, "count(/root)");
        int countRoot = nCountRoot.intValue();
     
        String rootContent = (String)XPath.selectSingleNode(doc, "string(/root)");
     
        Number nRootNumberContent = (Number)XPath.selectSingleNode(doc, "number(/root)");
        int rootNumberContent = nRootNumberContent.intValue();
     
        System.out.println("<root>28</root>\n");
        System.out.println("count(/root): " + countRoot);
        System.out.println("string(/root): " + rootContent);
        System.out.println("number(/root): " + rootNumberContent);
     
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    Je reconnais que selectNodes() et selectSingleNode() ne sont pas très bien nommés, et que c'est pas pratique de devoir écrire les conversions de type.
    Mais ils récupèrent parfaitement les nombres, strings et booléens.

    Citation Envoyé par brnspdl Voir le message
    et ne permet pas de retourner des String calculées par la fonction XSL number(nodeset) par exemple.
    Bah vu que number() renvoie comme son nom l'indique un nombre et pas une string, c'est peut-être normal .
    Précisons au passage que number() est une fonction de base de XPath, et pas restreinte à XSLT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Merci pour l'info

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDOM] Problème JDOM et XPath
    Par anizlewan dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/08/2012, 17h42
  2. [XPATH] jdom vs XPath
    Par luna007 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 08/10/2010, 15h25
  3. [JDOM] xpath+jdom+regex ==> suppression balise
    Par fasfousba dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 14/11/2008, 10h27
  4. Réponses: 21
    Dernier message: 16/04/2008, 10h06
  5. [Java] Obtenir le XPath d'un noeud DOM
    Par krappa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/09/2005, 16h06

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