p
u
b
l
i
c
i
t
é
publicité
  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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    10 366
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 10 366
    Points : 17 292
    Points
    17 292

    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 441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : octobre 2009
    Messages : 1 441
    Points : 2 388
    Points
    2 388

    Par défaut

    Bonjour,

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

    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
    <?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
    10 366
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 10 366
    Points : 17 292
    Points
    17 292

    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
    10 366
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 10 366
    Points : 17 292
    Points
    17 292

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
     
    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
    10 366
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 10 366
    Points : 17 292
    Points
    17 292

    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.

Discussions similaires

  1. Problème écriture fichier xml
    Par ludo24 dans le forum ASP
    Réponses: 23
    Dernier message: 23/06/2008, 11h48
  2. [XPATH] parcours fichier xml : performances
    Par loic72 dans le forum XML
    Réponses: 2
    Dernier message: 25/02/2008, 16h01
  3. [C#] Problème chargement fichier xml dans treeview
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2006, 14h10
  4. Parcours fichier xml
    Par Christophe Charron dans le forum JavaScript
    Réponses: 4
    Dernier message: 22/05/2006, 20h37
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum XML
    Réponses: 3
    Dernier message: 07/07/2005, 18h11

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