parser un XML

parser un XML - Java - Programmation

Marsh Posté le 10-06-2014 à 11:40:50    

Bonjour,
 
Je débute en java et je voudrai récupérer des valeurs dans un XML.
 
J'ai écris ce bout de code pour essayer de récupérer au moins la valeur "name" de chaque élément <agent> de l'entrée <ACO>, mais je ne récupère aucune valeur. :(
Pouvez vous m'aider et me dire quelle erreur je fais ?
 
Par avance merci.
 
Mon code avec ce que j'ai trouvé à droite et à gauche :
 

Code :
  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.util.List;
  4. import org.jdom.Document;
  5. import org.jdom.Element;
  6. import org.jdom.JDOMException;
  7. import org.jdom.input.SAXBuilder;
  8. public class testjdom {
  9. public static void main(String[] args) {
  10.   SAXBuilder builder = new SAXBuilder();
  11.   File xmlFile = new File("param.xml" );
  12.   try {
  13.  Document document = (Document) builder.build(xmlFile);
  14.  Element rootNode = document.getRootElement();
  15.  System.out.println("racine = "+rootNode);
  16.  List list = rootNode.getChildren("ACO" );
  17.  for (int i = 0; i < list.size(); i++) {
  18.     Element node = (Element) list.get(i);
  19.     System.out.println("Agent : " + node.getChildText("agent" ));
  20.     System.out.println("Agent : " + node.getChildText("agent" ));
  21.  }
  22.   } catch (IOException io) {
  23.  System.out.println(io.getMessage());
  24.   } catch (JDOMException jdomex) {
  25.  System.out.println(jdomex.getMessage());
  26.   }
  27. }
  28. }

:
 
et mon xml :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <!--June 5, 2014, 11:16-->
  3. <project name="test_00.10" env="pr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  4.   <ACO name="R12_test" defaultAgentName="public" logFileName="E:\agent.log">
  5.     <agent name="R12_test_00.10_pr" url="test.f"/>
  6.     <agent name="R12_test_00.11_pr" url="test2.fr"/>
  7.     <agent name="R12_test_00.12_pr" url="test3.fr"/>
  8.     <agent name="R12_test_00.13_pr" url="test4.fr"/>
  9.     <agent name="R12_test_00.14_pr" url="test5.fr"/>
  10.   </ACO>
  11.   <domain name="R12_test_00.10">
  12.     <realm name="R12_test_00.10_tout" filter="/" scheme="Standard" protectAll="1">
  13.       <rule name="default" action="Get,Post"/>
  14.       <rule name="reject" action="OnAccessReject"/>
  15.     </realm>
  16.     <realm name="R12_test_00.10_quisuisje.aspx_unprotected" filter="quisuisje.aspx" scheme="Basic" protectAll="0"/>
  17.     <response name="default" attr="test1" agentType="WebAgent-HTTP-Header-Variable"/>
  18.     <response name="default" attr="test2" agentType="WebAgent-HTTP-Header-Variable"/>
  19.     <response name="default" attr="test3" agentType="WebAgent-HTTP-Header-Variable"/>
  20.     <response name="default" attr="test4" agentType="WebAgent-HTTP-Header-Variable"/>
  21.     <policy name="R12_test_00.10_Policy" userPolicy="OU=Root">
  22.       <responseAssociation rule="default" realm="test_00.10_tout" response="default"/>
  23.       <responseAssociation rule="reject" realm="test_00.10_tout" response="reject_global"/>
  24.     </policy>
  25.   </domain>
  26. </project>

:
 
En résultat j'ai :
 
racine = [Element: <project/>]
Agent :
Agent :
 
:jap:

Reply

Marsh Posté le 10-06-2014 à 11:40:50   

Reply

Marsh Posté le 10-06-2014 à 14:47:57    

Help :jap:

Reply

Marsh Posté le 10-06-2014 à 16:55:58    

:(

Reply

Marsh Posté le 10-06-2014 à 17:52:49    

pour moi le comportement est "cohérent" : getChildText renvoie le contenu de la balise "agent"... qui n'en n'a pas ...
 
Tu veux probablement utiliser plutôt getAttributeValue via un getChildren
 
Pourrais-tu essayer plutôt le code suivant :  

Code :
  1. for(Element agentNode : list.get(i).getChildren("agent" )){
  2.    System.out.println("Agent : " + agentNode.getAttributeValue("name" ));
  3. }


à la place du getChildText et voir si ça change qq chose.
 
Mais

Message cité 1 fois
Message édité par dreameddeath le 11-06-2014 à 10:24:53
Reply

Marsh Posté le 10-06-2014 à 18:09:53    

Merci beaucoup, je teste ça des que possible.
Je te tiens au courant :jap:

Reply

Marsh Posté le 11-06-2014 à 11:19:46    

dreameddeath a écrit :

pour moi le comportement est "cohérent" : getChildText renvoie le contenu de la balise "agent"... qui n'en n'a pas ...
 
Tu veux probablement utiliser plutôt getAttributeValue via un getChildren
 
Pourrais-tu essayer plutôt le code suivant :  

Code :
  1. for(Element agentNode : list.get(i).getChildren("agent" )){
  2.    System.out.println("Agent : " + agentNode.getAttributeValue("name" ));
  3. }


à la place du getChildText et voir si ça change qq chose.
 
Mais


 
Bonjour Dreameddeath,
 
J'ai essayé ce que tu me propose mais j'ai l'arreur suivante :
 

Code :
  1. javac -classpath jdom-1.1.3.jar;. testjdom.java
  2. testjdom.java:32: cannot find symbol
  3. symbol  : method getChildren(java.lang.String)
  4. location: class java.lang.Object
  5.                                 for(Element agentNode : list.get(i).getChildren("agent" ))
  6.                                                                              ^
  7. 1 error


 
Je n'arrive pas à comprendre et à corriger :(
 
merci de ton aide.

Reply

Marsh Posté le 11-06-2014 à 13:49:34    

web_olivier a écrit :


 
Bonjour Dreameddeath,
 
J'ai essayé ce que tu me propose mais j'ai l'arreur suivante :
 

Code :
  1. javac -classpath jdom-1.1.3.jar;. testjdom.java
  2. testjdom.java:32: cannot find symbol
  3. symbol  : method getChildren(java.lang.String)
  4. location: class java.lang.Object
  5.                                 for(Element agentNode : list.get(i).getChildren("agent" ))
  6.                                                                              ^
  7. 1 error


 
Je n'arrive pas à comprendre et à corriger :(
 
merci de ton aide.


 
J'ai trouvé la solution :
 

Code :
  1. public class testjdom
  2. {
  3. public static void main(String[] args)
  4. {
  5.  SAXBuilder builder = new SAXBuilder();
  6.  File xmlFile = new File("ludo.param.xml" );
  7.  try
  8.  {
  9.   Document document = (Document) builder.build(xmlFile);
  10.   Element rootNode = document.getRootElement();
  11.   List<Element> ACOElements = rootNode.getChildren("ACO" );
  12.   for(Element element : ACOElements)
  13.   {
  14.    String ACOName=element.getAttribute("name" ).getValue();
  15.    System.out.println("ACO= "+ACOName);
  16.    List<Element> agentList=element.getChildren(agent);
  17.    for(int i = 0 ; i<agentList.size() ; i++)
  18.    {
  19.     Element agentName = agentList.get(i);
  20.     System.out.println("agent= "+agentName.getAttribute("name" ).getValue());
  21.     System.out.println("url= "+agentName.getAttribute("url" ).getValue());
  22.    } 
  23.   }
  24.   List<Element> domainElements = rootNode.getChildren("domain" );
  25.    for(Element element : domainElements)
  26.   {
  27.    String domainName=element.getAttribute("name" ).getValue();
  28.    System.out.println("Domain= "+domainName);
  29.    List<Element> realmList=element.getChildren("realm" );
  30.    for(int i = 0 ; i<realmList.size() ; i++)
  31.    {
  32.     Element realmName = realmList.get(i);
  33.     System.out.println("realm= "+realmName.getAttribute("name" ).getValue());
  34.     System.out.println("scheme= "+realmName.getAttribute("scheme" ).getValue());
  35.    } 
  36.   }
  37.  }
  38.  catch (IOException io)
  39.  {
  40.   System.out.println(io.getMessage());
  41.  }
  42.  catch (JDOMException jdomex)
  43.  {
  44.   System.out.println(jdomex.getMessage());
  45.  }
  46. }
  47. }


 
:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed