+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Homme Profil pro
    Inscrit en
    janvier 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : janvier 2008
    Messages : 57
    Points : 8
    Points
    8

    Par défaut Problème avec namespace pour parcours xml

    Bonjour ,
    je cherche depuis quelques jours à parcourir un fichier XML :
    Code :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <sh:titi xmlns:sh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:eanucc="urn:ean.ucc:2" xmlns:gdsn="urn:ean.ucc:gdsn:2">
       <eanucc:tata>
              <gdsn:toto>
    		  <valeur> 2456</valeur>
    		  </gdsn:toto>
       </eanucc:tata>
    </sh:titi>
    je cherche à obtenir valeur
    voici mon code java
    Code :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    public class parser{
     
     
    	static NamespaceContext namespace = new NamespaceContext(){
    		public String getNamespaceURI(String prefix){
    			if("content".equals("sh")){
    				return "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader";
    			}
    			else if ("content".equals("gdsn")){
    				return "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader";
    			}
    			else if ("content".equals("eanucc")){
    				return "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader";
    			}
    			else{
    				return null;
    			}
    		}
    		public String getPrefix(String namespaceURI){
    			if("http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader".equals(namespaceURI)){
    				return "sh";
    			}
    			else if("http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader".equals(namespaceURI)){
    					return "gdsn";
    			}
    			else{
    				return null;
    			}
    		}
    		public Iterator getPrefixes(String namespaceURI){
    			return null;
    		} 
    	};
     
     
    	public static String evaluerSAX(File file, String expression, QName retour) throws FileNotFoundException, XPathExpressionException{
     
     
    			//création de la source
    			InputSource source = new InputSource(new FileInputStream(file));
     
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
    			xpath.setNamespaceContext(namespace);
     
    			  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/exemple.xml");
    			namespace.getNamespaceURI("sh");
    			namespace.getNamespaceURI("eanucc");
    			namespace.getNamespaceURI("gdsn");
     
    		String tot =	evaluerSAX(xml,"//sh:titi/seanucc:tata/gdsn:toto/valeur",XPathConstants.STRING);
     
     
    		System.out.println(tot);
    		}catch(Exception e){
    			e.printStackTrace();	
    		}
    	}	 
    }

    Mais il y a un problème de définition des namespace. Le compilateur me rend cette erreur:
    Code :

    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
     
    com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Le préfixe doit se convertir en espace de noms : sh
    	at com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:653)
    	at com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:638)
    	at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:265)
    	at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:96)
    	at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:110)
    	at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:176)
    	at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:264)
    	at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:394)
    	at ssessai.evaluerSAX(ssessai.java:78)
    	at ssessai.main(ssessai.java:103)
    --------------- linked to ------------------
    javax.xml.xpath.XPathExpressionException
    	at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:402)
    	at ssessai.evaluerSAX(ssessai.java:78)
    	at ssessai.main(ssessai.java:103)
    Caused by: com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Le préfixe doit se convertir en espace de noms : sh
    	at com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:653)
    	at com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:638)
    	at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:265)
    	at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:96)
    	at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:110)
    	at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:176)
    	at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:264)
    	at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:394)
    	... 2 more
    J'ai un peu tout essayer.Quelqu'un peux m'aider SVP.
    Merci d'avance.

  2. #2
    Invité régulier
    Homme Profil pro
    Inscrit en
    janvier 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : janvier 2008
    Messages : 57
    Points : 8
    Points
    8

    Par défaut

    Bonjour,
    je voulais ajouter que getNamespaceURI(prefix) me retourne une valeur nulle. je sais pas quel est la cause.
    Alors si vous avez une idée ??
    Merci.

  3. #3
    Membre Expert
    Inscrit en
    septembre 2006
    Messages
    1 466
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 1 466
    Points : 1 685
    Points
    1 685

    Par défaut

    En effet cette méthode te retournera toujours une valeur null car tu ne testes jamais la valeur du paramètre d'entrée .
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public String getNamespaceURI(String prefix){
    			if("content".equals("sh")){
    				return "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader";
    			}
    			else if ("content".equals("gdsn")){
    				return "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader";
    			}
    			else if ("content".equals("eanucc")){
    				return "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader";
    			}
    			else{
    				return null;
    			}
    		}

  4. #4
    Invité régulier
    Homme Profil pro
    Inscrit en
    janvier 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : janvier 2008
    Messages : 57
    Points : 8
    Points
    8

    Par défaut

    Ok je réalise bien maintenant ce que j'ai fait :
    Merci .

+ 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
  •