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 :

Charger un xml à partir d'un lien internet [JDOM]


Sujet :

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

  1. #21
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par pendoRa Voir le message
    J'ai pas compris pourquoi cube est dans le namespace?
    parce que c'est indiqué au début du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
    => Les éléments non préfixés sont dans le namespace http://www.ecb.int/vocabulary/2002-08-01/eurofxref

    Cube n'est pas préfixé => il est dans ce namespace.

    la condition ne se vérifie pas, peut être qu'il ne s'y retrouve pas avec XPath.SelectNodes ?
    Ben, justement, c'est parce que Cube est dans un namespace, et que l'exemple de XPath fourni suppose que Cube n'est pas dans un namespace. Le XPath ne sélectionne donc rien, car ce fichier ne contient aucun élément Cube qui ne soit pas dans un namespace.

    (Oui, bon, je reconnais que ça devient compliqué, j'avais pas vu au début. En gros il faut d'abord comprendre le concept de namespace, et après tout roule.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #22
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Bon tres bien, j'avou que je suis un peu perdu maintenant.. mais je vais me renseigner sur le namespace.
    Mais si je passe par une lecture html de cette page http://www.ecb.int/stats/exchange/eu.../index.en.html
    et je récupère le taux ?

  3. #23
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    Tu devrais recréer un nouveau post, en expliquant ton cas :s.
    Je t'ai doné une expression xpath pour récuprer l'élément que tu veux mais comme l'a indiqué Thevin le namespace gache tout

  4. #24
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par pendoRa Voir le message
    Mais si je passe par une lecture html de cette page http://www.ecb.int/stats/exchange/eu.../index.en.html
    et je récupère le taux ?
    Ça te paraît pas un tout petit peu plus compliqué que juste lire un fichier XML ? Je t'ai déjà donné la solution. Les namespaces, bon, il faut comprendre le principe c'est vrai, mais tu es censé être un programmeur, hein.

    Je t'ai doné une expression xpath pour récuprer l'élément que tu veux mais comme l'a indiqué Thevin le namespace gache tout
    Oui enfin, il suffirait que tu modifies ton expression XPath pour tenir compte du namespace. Comme j'ai fait moi, quoi, sauf que je suis aussi plus prudent face aux possibilités d'évolution et face aux fichiers trop grands.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #25
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    Oui thelvin,
    j'avais pas vu la solution simple que tu proposé. Effectivement la solution simple devrais répondre à sa demande, chacun sa maniére de faire sa requête Xpath ^^

  6. #26
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je me permets de rouvrir ce forum car je cherche à faire exactement la même chose que tamildark, c’est-à-dire que je souhaiterais récupérer les valeurs des taux de changes via le XML : http://www.ecb.europa.eu/stats/eurof...xref-daily.xml
    Ensuivant vos différents conseils, j’en suis arrivé à ce bout de code :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    package dao.impl;
    import java.net.URL;
    import java.util.Iterator;
    import java.util.List;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.Namespace;
    import org.jdom.input.SAXBuilder;
    import org.jdom.xpath.XPath;
    import org.xml.sax.XMLReader;
    public class test{
     
    	public static final Namespace REF_NS =
    			  Namespace.getNamespace("ref", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
    			// Pas envie de mettre le nom de la racine, remplaçons par *
    			public static final String CURRENCY_PATH_TEMPLATE =
    			  "/*/ref:Cube/ref:Cube/ref:Cube[@currency='%s']";
    			static org.jdom.Document document;
    			SAXBuilder sxb = new SAXBuilder();{
    			try{
    			document = sxb.build(new URL("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"));
    			}
    			catch(Exception e){
    			      e.printStackTrace();}
    				 }
    			static String getCurrencyValue(String currencyCode) throws JDOMException {
    				  String sXPath = String.format(CURRENCY_PATH_TEMPLATE, currencyCode);
    				  XPath path = XPath.newInstance(sXPath);
     
     
     
    				  path.addNamespace(REF_NS);
     
    				  Element cube = (Element)path.selectSingleNode(document);
    				  return cube.getAttributeValue("rate");
    				}
     
    			public static void main(String[] args){
    				try {
    					getCurrencyValue("USD");
    				} catch (JDOMException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    }
    La console me répond:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Exception in thread "main" java.lang.NullPointerException
    	at org.jaxen.jdom.DocumentNavigator.getDocumentNode(DocumentNavigator.java:398)
    	at org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate(DefaultAbsoluteLocationPath.java:102)
    	at org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
    	at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:677)
    	at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:216)
    	at org.jaxen.BaseXPath.selectSingleNode(BaseXPath.java:237)
    	at org.jdom.xpath.JaxenXPath.selectSingleNode(JaxenXPath.java:153)
    	at dao.impl.test.getCurrencyValue(test.java:37)
    	at dao.impl.test.main(test.java:43)
    Je pense que l’erreur est causé par le lien http://www.ecb.int/vocabulary/2002-08-01/eurofxref de la première ligne du XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
    En effet, lorsque qu’on tente d’ouvrir ce lien, le site nous dit que la page demandée n’existe pas.
    Pourriez-vous m’aider, s’il vous plait?

    Edit: la solution était bête, désolé !

    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
    public static void main(String[] args) throws JDOMException{
    				org.jdom.Document document = null;
    				SAXBuilder sxb = new SAXBuilder();{
    				try{
    				document = sxb.build(new URL("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"));
    				}
    				catch(Exception e){
    				      e.printStackTrace();}
    					 }
    				final Namespace REF_NS = Namespace.getNamespace("ref", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
    				// Pas envie de mettre le nom de la racine, remplaçons par *
    		final String CURRENCY_PATH_TEMPLATE = "/*/ref:Cube/ref:Cube/ref:Cube[@currency='%s']";
     
    		String sXPath = String.format(CURRENCY_PATH_TEMPLATE, "USD");
    		XPath path = XPath.newInstance(sXPath);
    		path.addNamespace(REF_NS);
     
    		  Element cube = null;
     
    			cube = (Element)path.selectSingleNode(document);
    			String test=cube.getAttributeValue("rate");
     
     
    				System.out.println(test);
    			}
    Dernière modification par Invité ; 11/05/2015 à 18h32.

  7. #27
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    pas du tout c'est juste que t'as jamais récupéré le document ni initialisé la variable document.

    Ton machin bizarre entre { et } devrait être évité.
    Il faudrait faire ça dans la méthode main() par exemple. Ou alors il faudrait que ce soit quelque chose du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static final Document document = loadDocument();
     
    static Document loadDocument() {
      SAXBuilder sxb = new SAXBuilder();
      try{
        return sxb.build(new URL("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"));
      } catch(IOException | JDOMException e) {
        throw new IllegalStateException(e.getMessage(), e);
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #28
    Invité
    Invité(e)
    Par défaut
    C'est mieux, en effet! Merci.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Charger 2 frames à partir d'un lien IE KO FF OK
    Par emmeline.a dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/10/2010, 15h13
  2. charger un swf à partir d'un xml
    Par condon dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 26/08/2008, 17h21
  3. Enregistrement à partir du lien internet
    Par imparator_42 dans le forum Langage
    Réponses: 13
    Dernier message: 30/05/2008, 21h15
  4. charger un xml avec liens hypertextes
    Par lecirederf dans le forum Flash
    Réponses: 12
    Dernier message: 23/10/2006, 15h03
  5. Lien internet a partir d'une image
    Par Furlaz dans le forum C++Builder
    Réponses: 28
    Dernier message: 15/06/2006, 13h57

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