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
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
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.
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.
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.)
et je ne pourrais pas utiliser DocumentContainer de jxpath pour parser mon XML et créer mon context ?
Trouvé
avec :
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 import org.xml.sax.InputSource; import javax.xml.parsers.*;
... 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; }
j'ai une contrainte de devoir absolument utiliser jxpath.
Partager