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

Format d'échange (XML, JSON...) Java Discussion :

XSLT avec Java


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 72
    Par défaut XSLT avec Java
    je cherche a calculer le nombre de <message> pour chaque <element> dans cette document
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <data>
     <element>
             <application>
                <id>2305272732</id>
                <name>Photos</name>
             </application>
             <comments>
                <data>
                   <element>
    			   <message>lol kif mté3na mé en noir</message>
                   </element>
    			   <element>
    			   <message>koll chay bèhi svp donnez nous l,adresse pliz</message>  
                   </element>
                   <element>
                     <message>usine rte mahdia km 10 (sal dexpo rte saltnia km 7 )tel 22836915</message>
    			   </element>
                </data>
              </comments>
             <created_time>2013-01-27T21:37:04+0000</created_time>
             <id>203359423100517_407769165970947</id>
          </element>
    	  <element>
             <created_time>2013-01-31T19:14:30+0000</created_time>
             <id>203359423100517_303378843098574</id>
             <type>status</type>
          </element>
    	  <element>
             <application>
                <id>2305272732</id>
                <name>Photos</name>
             </application>
             <comments>
                <data>
                   <element>
    			   <message>la table basse est superbe</message>
                   </element> 
                </data>
    		</comments>
             <created_time>2013-03-20T18:17:16+0000</created_time>
             <id>203359423100517_147702965397931</id>
           </element>
    	 </data> 
    	</root>
    mais mon code en java il permet de calculer le nombre de message en totale dans le document xml
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpression;
    import javax.xml.xpath.XPathFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    public class fait {
     
    	public static void main(String[] args) {
     
            try {
    FileInputStream file = new FileInputStream(new File("C:/XML/feed/feed-mars.xml"));
     
                DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
     
                DocumentBuilder builder =  builderFactory.newDocumentBuilder();
     
                Document xmlDocument = builder.parse(file);
     
                xmlDocument.getDocumentElement().normalize();
               XPath xPath =  XPathFactory.newInstance().newXPath();
    String expression2 = "/root/data/element/comments/data/element";
     
     NodeList nodeList = (NodeList)xPath.compile(expression2).evaluate(xmlDocument,XPathConstants.NODESET);
     
     
                 int i=0;
                int  nbc=0;  
                Node node = null;
                while( (nodeList.getLength()>0)&&(i<nodeList.getLength())) 
                {   
                	System.out.println(nodeList.item(i).getFirstChild().getNodeValue());
                    String idf2= nodeList.item(i).getFirstChild().getNodeValue();  
                    i++;
     
                    node = (Node) xPath.compile("/root/data/element/comments/data/element/message").evaluate(xmlDocument, XPathConstants.NODE);
                    if (node.getFirstChild().getNodeValue()!="") 
                    {nbc++;}
     
     
     
                    }   
                System.out.println("le nb commentaires="+nbc); 
    } 
            catch (Exception e) {
    		     System.out.println(e.getMessage());
    		     e.printStackTrace();}
     
            }
     
    }
    merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    il faut que tu le fasses en plusieurs étapes :
    - avec un xpath tu vas chercher chacun de tes éléments
    - pour chaque élément, avec un xpath relatif à cet élément tu vas chercher les messages

    Par exemple :

    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
    33
    34
    35
    36
    37
    38
    try {
    	File file = new File("C:/XML/feed/feed-mars.xml");
     
    	DocumentBuilderFactory builderFactory = DocumentBuilderFactory
    			.newInstance();
     
    	DocumentBuilder builder = builderFactory.newDocumentBuilder();
     
    	Document xmlDocument = builder.parse(file);
     
    	xmlDocument.getDocumentElement().normalize();
    	XPath xPath = XPathFactory.newInstance().newXPath();
     
    	// on récupère la liste des "element"
    	NodeList nodeList = (NodeList) xPath.compile("/root/data/element").evaluate(
    			xmlDocument, XPathConstants.NODESET);
     
    	for(int i=0;i < nodeList.getLength(); i++) {
    		Node node = nodeList.item(i);
     
                    // on récupère l'id
    		Node idNode = (Node) xPath.compile(
    		"id")
    		.evaluate(node, XPathConstants.NODE);
    		String id = idNode.getTextContent();
    		//System.out.println("document id: "+id);
     
                    // on récupère les "message" non vide dans "element" courant
    		NodeList messages = (NodeList) xPath.compile(
    				"comments/data/element/message[text()!='']")
    				.evaluate(node, XPathConstants.NODESET);
    		System.out.println("le nb de commentaire de l'element d'id " +id +" = " + messages.getLength());
     
    	}
    } catch (Exception e) {
    	//System.out.println(e.getMessage());
    	e.printStackTrace();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 72
    Par défaut
    merci infiniment pour votre réponse ça marche

  4. #4
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 72
    Par défaut
    dans le même principe je cherche à récupérer les <id> et <count> qui se trouvent dans <like> et le <count> qui se trouve dans le balise <shares>,
    j'ai développé un code comme le précédent mais j'arrive pas de récupérer tous les nœuds , je pense c'est très facile , mais il m' affiche seulement le premier nœud plusieurs fois,
    Code XML : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <data>
     <element>
        <created_time>2013-01-27T21:37:04+0000</created_time>
        <id>203359423100517_407769165970947</id>    
        <likes>
                <count>8</count>
                <data>
                   <element>
                      <id>100000779156132</id>
                      <name>Safa Kerkeni</name>
                   </element>
                   <element>
                      <id>1502882062</id>
                      <name>Emna Klibi</name>
                   </element>
                </data>
        </likes>
            <type>photo</type> 
        <shares>
            <count>3</count>
        </shares>
     
    </element>
    <element>
             <created_time>2013-01-31T19:14:30+0000</created_time>
             <id>203359423100517_303378843098574</id>
             <type>status</type>
    </element>
    <element>
     
        <created_time>2013-03-20T18:17:16+0000</created_time>
        <id>203359423100517_147702965397931</id>
        <shares>
             <count>3</count>
        </shares>
    </element>
     </data> 
    </root>

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    try {
    	File file = new File("C:/XML/feed/feed-mars.xml");
     
    	DocumentBuilderFactory builderFactory = DocumentBuilderFactory
    			.newInstance();
     
    	DocumentBuilder builder = builderFactory.newDocumentBuilder();
     
    	Document xmlDocument = builder.parse(file);
     
    	xmlDocument.getDocumentElement().normalize();
    	XPath xPath = XPathFactory.newInstance().newXPath();
     
    	// on récupère la liste des "element"
    	NodeList nodeListe = (NodeList) xPath.compile("/root/data/element").evaluate(
    			xmlDocument, XPathConstants.NODESET);
    for(int i=0;i < nodeListe.getLength(); i++) 
            	{
            		Node node = nodeListe.item(i);
     
                     // on récupère l'id de la page
            		Node idNode = (Node) xPath.compile(
            		"id")
            		.evaluate(node, XPathConstants.NODE);
            		String idp = idNode.getTextContent();
            		System.out.println("document id page: "+idp);
            		// on récupère l'id de fans
            		Node idlikNode = (Node) xPath.compile(
            		"/root/data/element/likes/data/element/id[text()!='']").evaluate(node, XPathConstants.NODE);
            		String ilike=idlikNode.getTextContent();
            		System.out.println(" id like: "+ilike);
            		// on récupère nb like 
            		Node nblikNode = (Node) xPath.compile(
            		"/root/data/element/likes/count").evaluate(node, XPathConstants.NODE);
            		String nblik=nblikNode.getTextContent();
            		System.out.println(" le nb like: "+nblik);
            		// on récupère nb shares
            		Node nbshares = (Node) xPath.compile(
            		"/root/data/element/shares/count").evaluate(node, XPathConstants.NODE);
            		String nbsh=nbshares.getTextContent();
            		System.out.println(" le nb shares: "+nbsh);
            	}
    } catch (Exception e) {
    	//System.out.println(e.getMessage());
    	e.printStackTrace();
    }
    il m'affiche
    document id page: 203359423100517_407769165970947
    id like: 100000779156132
    le nb like: 8
    le nb shares: 3
    document id page: 203359423100517_303378843098574
    id like: 100000779156132
    le nb like: 8
    le nb shares: 3
    document id page: 203359423100517_147702965397931
    id like: 100000779156132
    le nb like: 8
    le nb shares: 3
    malheureusement je suis débutante avec xpath en java
    merci d'avance

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,


    au sujet de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Node idlikNode = (Node) xPath.compile(
    "/root/data/element/likes/data/element/id[text()!='']").evaluate(node, XPathConstants.NODE);
    ton xpath est absolu, donc même si tu l'appliques à node, tu vas obtenir tous les elements "id" qui sont dans un élément "element" qui est dans un élément "data" qui est dans un élément "likes" qui est dans un élément "element" qui est dans un élémént "data" qui est dans l'élément racine "root".

    Le fait que tu demandes un NODE fait que tu obtiens le premier elément de cette liste d'éléments, donc le premier élément "id" qui est dans un élément "element" qui est dans un élément "data" qui est dans un élément "likes" qui est dans un élément "element" qui est dans un élémént "data" qui est dans l'élément racine "root".

    Comme pour le cas précédent des messages de commentaires, tu dois aller chercher aller chercher, avec un path relatif, chaque élément dans likes, pour obtenir son id, et comme tu en as plusieurs par document il faudra récupérer un NODE_SET pour tous les avoirs.

    Pour count et shares, pareil, il faut que tu fasses un path relatif.

    Si l'expression commence par /, elle est absolue, donc valable pour le xml complet. Si l'expression ne commence pas par /, elle est relative au contexte (le node passé en argument), soit "à l'intérieur" du contexte.
    Note que si rien ne correspond à ton expression, tu récupères null, donc il faut tester ce cas.

    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
    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
    try {
    		File file = new File("C:/XML/feed/feed-mars.xml");
     
    		DocumentBuilderFactory builderFactory = DocumentBuilderFactory
    				.newInstance();
     
    		DocumentBuilder builder = builderFactory.newDocumentBuilder();
     
    		Document xmlDocument = builder.parse(file);
     
    		xmlDocument.getDocumentElement().normalize();
    		XPath xPath = XPathFactory.newInstance().newXPath();
     
    		String expression2 = "/root/data/element";
    		NodeList nodeList = (NodeList) xPath.compile(expression2).evaluate(
    				xmlDocument, XPathConstants.NODESET);
     
    		for(int i=0;i < nodeList.getLength(); i++) {
    			Node node = nodeList.item(i);
     
    			Node idNode = (Node) xPath.compile(
    			"id")
    			.evaluate(node, XPathConstants.NODE);
    			String id = idNode.getTextContent();
    			System.out.println("document id: "+id);
     
    			Node likNode = (Node) xPath.compile(
    					"likes")
    					.evaluate(node, XPathConstants.NODE);
     
    			if ( likNode!=null ) {
     
    				NodeList likes = (NodeList) xPath.compile(
    						"data/element/id")
    						.evaluate(likNode, XPathConstants.NODESET);
    				for(int j=0; j<likes.getLength(); j++) {
    					System.out.println(" id like: "+likes.item(j).getTextContent());				
    				}
     
    				Node nblikNode = (Node) xPath.compile(
    						"count")
    						.evaluate(likNode, XPathConstants.NODE);
    				if ( nblikNode!=null ) {
    					String nblik=nblikNode.getTextContent();
    	        		System.out.println(" le nb likes: "+nblik);
    				} else {
    					System.out.println(" le nb likes: 0");
    				}
    			}
    			else {
            		System.out.println(" pas de likes");
    			}
     
    			Node nbshares  = (Node) xPath.compile(
    					"shares/count")
    					.evaluate(node, XPathConstants.NODE);
    			if ( nbshares!=null ) {
    				String nbsh=nbshares.getTextContent();
    				System.out.println(" le nb shares: "+nbsh);
    			}
    			else {
            		System.out.println(" pas de shares");
    			}
     
     
    		}
    } catch (Exception e) {
      //System.out.println(e.getMessage());
      e.printStackTrace();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mars 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 72
    Par défaut
    merci infiniment pour votre aide ça marche

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

Discussions similaires

  1. [XSLT] appliqer xslt à xml avec Java
    Par yous_han dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 12/05/2011, 14h29
  2. [XSLT] xslt en java
    Par yass dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 12/09/2008, 16h41
  3. [XSLT] Problème de transformation XSLT avec JAVA
    Par ploxien dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 28/09/2007, 16h47
  4. Réponses: 3
    Dernier message: 27/01/2004, 16h15
  5. [JNDI] Equivalent avec Java Web Start ?
    Par cameleon2002 dans le forum Java EE
    Réponses: 8
    Dernier message: 18/09/2003, 18h55

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