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

XML/XSL et SOAP Discussion :

[XPath] Dom4j attribut


Sujet :

XML/XSL et SOAP

  1. #1
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut [XPath] Dom4j attribut
    Salut à Tous,

    Voici mon xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version='1.0' encoding='UTF-8' ?>
    <RDF xmlns:r="http://www.w3.org/TR/RDF/"
         xmlns:d="http://purl.org/dc/elements/1.0/"
         xmlns="http://directory.mozilla.org/rdf">
     
    <Topic r:id="Top">
      <d:Title>Top</d:Title>
        <narrow r:resource="Don't_Care"/>
        <narrow r:resource="Repair"/>
        <narrow r:resource="Supplies"/>
        <narrow r:resource="Possible_Dispatch"/>
    </Topic>
    </RDF>
    je souhaite récupérer les valeur Don't_Care, Repair, Supplies et Poissible_Dispatch.

    Je débute avec XPath et j'ai testé pas mal de trucs, mais je ne vois pas. Voici mon dernier code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dom4jXPath xpathSelector = new Dom4jXPath("//Topic[@id='Top']/narrow[@resource]");
    		    List results = xpathSelector.selectNodes(document);
    		    for ( Iterator iter = results.iterator(); iter.hasNext(); ) {
    		      Element element = (Element) iter.next();
    		      System.out.println(element.getName());
    		    }

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    tu n'as pas tenu compte des espaces de nom dans ton expression XPath : les attributs id et resource appartiennent à l'espace de nom "http://www.w3.org/TR/RDF/" et les éléments appartiennent à "http://directory.mozilla.org/rdf".

    Tu dois dans ton expression à la fois déclarer à quel espace de noms appartient chaque noeud en leur affectant un préfixe, et indiquer à quel URI (espace de noms) se rapporte chaque préfixe ; cette dernière opération s'effectue en passant en paramètre un objet implémentant NamespaceContext, une interface comportant une seule méthode (translateNamespacePrefixToUri) renvoyant l'URI correspondante au préfixe passé en paramètre. Le plus simple est d'implémenter cette interface dans la classe qui comprend ta recherche XPath. Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String translateNamespacePrefixToUri(String prefix) {
      if (prefix.equals("moz")) {
          return "http://directory.mozilla.org/rdf";
      } else if (prefix.equals("rdf")) {
          return "http://www.w3.org/TR/RDF/";
      } else return null;
    }
    ...
    Dom4jXPath xpathSelector = new Dom4jXPath("//moz:Topic[@rdf:id='Top']/moz:narrow[@rdf:resource]");
    xpathSelector.setNamespaceContext(this);
    List results = xpathSelector.selectNodes(document);
    ...
    Tu noteras que les préfixes de l'expression XPath ne sont pas forcément les mêmes que ceux de la source XML. L'importance est qu'ils pointent vers les mêmes URI. Une autre solution consisterait à utiliser la méthode addNamespace() pour faire le mapping prefix<->Namespace, mais il faudrait le refaire pour chaque expression XPath sur le même document.

  3. #3
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    OK merci, je vais tester ça!

  4. #4
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    ca marche!!!

    Merci...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/04/2010, 18h40
  2. [XSL-XPATH] compter attribut dynamique
    Par henri93 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 15/02/2010, 11h32
  3. Requete XPATH(Valeur attribut Père)
    Par heavydrinker dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/12/2008, 14h21
  4. [Xpath] Sélection des noeuds dont un attribut
    Par toxine dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 29/01/2007, 14h22
  5. [XSL][XPATH] recopier les attributs d un élément mais pas le
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/08/2005, 16h07

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