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

APIs XML Discussion :

Problème parcours fichier xml.


Sujet :

APIs XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Points : 32
    Points
    32
    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

    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
    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.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    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
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Points : 32
    Points
    32
    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

    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
    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.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Points : 32
    Points
    32
    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

    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
    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.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Points : 32
    Points
    32
    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

    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 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.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Points : 32
    Points
    32
    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 Format d'échange (XML, JSON...)
    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 Général JavaScript
    Réponses: 4
    Dernier message: 22/05/2006, 20h37
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    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