+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 39
    Points : 5
    Points
    5

    Par défaut Problème parcours fichier xml.

    Bonjour,
    Est-ce-que quelqu'un peut m'aider. je veut parcourir une fichier XML. Le problème est que mon code avec du xml simple comme :
    Code :
    1
    2
    3
    4
    5
    6
     
    <titi>
       <tata>
              <toto>zen</toto>
       </tata>
    </titi>
    fonctionne.
    Alors que si j'ajoute dans les nœuds certain attributs comme eanucc:,sh: comme ceci :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <sh:titi>
       <sh:tata>
              <sh:toto>zen</sh:toto>
       </sh:tata>
    </sh:titi>
    <eanucc:titi>
       <eanucc:tata>
              <eanucc:toto>zen</eanucc:toto>
       </eanucc:tata>
    </eanucc:titi>
    mon code ne fonctionne plus. j'arrive pas à récupérer des données. Et rien n'est affiché en exécution. Seulement un espace vide.
    j'utilise Xpath pour parcourir mon XML.
    Merci d'avance pour tout aide.

  2. #2
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    9 952
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 952
    Points : 16 521
    Points
    16 521

    Par défaut

    Ces choses ne sont pas des attributs mais des préfixes. Les préfixes servent à placer l'élément qu'ils préfixent dans un namespace.

    C'est à ça qu'ils servent. Ils doivent être utilisés pour ça et en aucun autre cas. Si tu déroges à cette règle, xPath, XSL et un bon paquet d'outils ne fonctionneront pas.
    Ton exemple ne peut pas marcher car il est invalide avec les namespaces : tes préfixes n'ont pas été associés à un namespace avec xmlns.

    Renseigne-toi sur les namespaces en XML, et normalement tu devrais comprendre, ce qui n'allait pas, ce qu'il faut faire pour que ça aille, et comment réparer tes xPath.

  3. #3
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    octobre 2009
    Messages
    1 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2009
    Messages : 1 438
    Points : 2 386
    Points
    2 386

    Par défaut

    Bonjour,

    après t'être documenter, par exemple en consultant la fac,
    tu doit obtenir un code similaire à :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0"?>
     
    <root 
      xmlns:sh="http://host.domain.tdl/ns/sh"
      xmlns:eanucc="http://host.domain.tdl/ns/eanucc">
     
    <sh:titi>
       <sh:tata>
              <sh:toto>zen</sh:toto>
       </sh:tata>
    </sh:titi>
    <eanucc:titi>
       <eanucc:tata>
              <eanucc:toto>zen</eanucc:toto>
       </eanucc:tata>
    </eanucc:titi>
     
    </root>
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  4. #4
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    Bonjour;
    Merci bien pour vos réponses.
    Mais je veux ajouter que mon XML est prédéfinit et je peu pas le changer. Je doit chercher à le parcourir sans ajouter ou éliminer quelque chose. je voit pa donc que voulait dire polymorphisme par "tu doit obtenir un code similaire"

  5. #5
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    9 952
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 952
    Points : 16 521
    Points
    16 521

    Par défaut

    Il veut dire que les préfixes doivent être déclarés avec la construction xmlns:prefixe comme il l'a montré dans son exemple.

    Il est très probable que le XML qu'on te fournit a des déclarations de ce genre. Si ce n'est pas le cas, alors il est assez mal fichu et ça va être compliqué de s'en servir.

    Mais cherche pas, tu dois d'abord apprendre à te familiariser avec les namespaces et les préfixes en XML. Sans une certaine compréhension de la chose, on ne peut pas se poser les bonnes questions.

  6. #6
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    Bonjour thelvin ,
    Je cherché dans le net. Alors ma compréhension du fonctionnement des namespace ne m'a pas beaucoup aidé à trouver le bon chemin à fournir dans Xpath afin de récupérer des données.
    alors si vous connaissez un site ou une ressource qui peut m'aider je serai très reconnaissante.
    Merci d'avance.

  7. #7
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    9 952
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 952
    Points : 16 521
    Points
    16 521

    Par défaut

    Normalement tu as maintenant compris qu'il faut :
    - Déclarer les namespaces et les associer à un préfixe.
    - Utiliser le préfixe en question devant le nom de l'élément.

    En xPath, il s'agit donc de préfixer les éléments tout pareil. Les différences :

    - Il n'y a pas de "namespace par défaut" en xPath. Si on ne met pas de préfixe, c'est que l'élément n'est pas dans un namespace. Autrement dit, si l'élément est dans un namespace, alors il doit être préfixé, un point c'est tout.
    - Les préfixes doivent être déclarés en dehors de l'expression xPath. Où, ça dépend de la technologie utilisée. En XSLT, il suffit de déclarer les préfixes à la racine de la stylesheet, et ils seront utilisables dans les expressions xPath.

  8. #8
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    Merci Thelvin;
    je vous donne mon code afin que tu me comprend mieux. Voici mon XML
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <sh:StandardDocument xmlns:sh="http://www.unece.org/cefact/namespaces/StandardDocumentHeader" xmlns:eanucc="urn:ean.ucc:2"
     
    <sh:StandardumentHeader>
    		<sh:Sender> "eeeee"</sh:Sender>
    		<sh:Receiver>"ffff"  </sh:Receiver>	
    </sh:StandardDocumentHeader>
    <eanucc:message>
           <Identifier> "hhhh"<Identifier>
    </eanucc:message>
    <sh:StandardDocument>
    Ma classe est la suivante
    Code :
    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
     
    public class ssessai{
     
     
    public static String evaluerSAX(File file, String expression, QName retour) throws FileNotFoundException, XPathExpressionException{
     
     
     
    	InputSource source = new InputSource(new FileInputStream(file));
     
     
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
    			XPathExpression exp = xpath.compile(expression);
    			Object resultat = exp.evaluate(source,retour);
    			System.out.println(resultat);
    			String value = resultat.toString();
                            return (value);	
    	}
    	public static void main(String[] args){
     
    		try{
     
          File xml = new File("templates/document.xml");
     
          String id = evaluerSAX(xml, "eanucc:message/Identifier", XPathConstants.STRING);
     
    		}catch(Exception e){
    			e.printStackTrace();	
    		}
    	}	
    }
    Quand j'exécute mon code, il ne me retourne aucune erreur. Mais à la place de id il me retourne un espace vide. Alors si préfixer l'élément se fait comme j'ai fait, elle est où l'erreur.
    Merci

  9. #9
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    9 952
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 952
    Points : 16 521
    Points
    16 521

    Par défaut

    Citation Envoyé par imen1986 Voir le message
    Quand j'exécute mon code, il ne me retourne aucune erreur.
    Il devrait : eanucc n'a pas été déclaré.

    Citation Envoyé par imen1986 Voir le message
    Alors si préfixer l'élément se fait comme j'ai fait, elle est où l'erreur.
    Tu n'as pas déclaré le préfixe eanucc.
    Arrivé à ce point-là tu devrais te rendre compte que tu n'as jamais eu l'occasion de le faire, et que c'est un problème puisque c'est obligatoire, non ?

    Cela se fait avec la méthode XPath.setNamespaceContext(). Il faut définir une classe qui implémente NamespaceContext et indique les namespaces à déclarer.

    (Note : utiliser JDOM est beaucoup plus facile que juste le DOM de Java.)

  10. #10
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 39
    Points : 5
    Points
    5

    Par défaut

    Ok merci beaucoup pour toute les informations Thelvin.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •