J'ai suivi ce tuto : http://cynober.developpez.com/tutoriel/java/xml/jdom/ pour parser un fichier XML.
Mon problème, c'est que je n'arrive pas à le parcourir.
Je récupère bien la racine, mais pas ses enfants.
Mon code (je fais du J2EE) :
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 org.jdom.Document document = new org.jdom.Document(); SAXBuilder sxb = new SAXBuilder(); try { document = sxb.build(new File("getListing.xml")); } catch(Exception e){} org.jdom.Element racine = document.getRootElement(); out.println(racine.getName()); org.jdom.Element enfant = racine.getChild("diffgr:diffgram"); if(enfant == null) { out.println("null"); } else { out.println("ok"); }
Et voici mon code XML. Je ne peux pas le changer car je le récupère sur internet. Je dois le parser pour récupérer ce que j'ai besoin et le mettre dans un document csv.
Il y'a plusieurs LISTING.
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 <?xml version="1.0" encoding="utf-8"?> <DataSet xmlns="http://www.faire-savoir.com/webservices/"> <xs:schema id="Listing" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="Listing" msdata:IsDataSet="true" msdata:Locale="fr-FR"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="LISTING"> <xs:complexType> <xs:sequence> <xs:element name="ID" type="xs:string" minOccurs="0" /> <xs:element name="DATECREA" type="xs:dateTime" minOccurs="0" /> <xs:element name="DATEMAJ" type="xs:dateTime" minOccurs="0" /> ... </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <Listing xmlns=""> <LISTING diffgr:id="LISTING1" msdata:rowOrder="0"> <ID>A6312AUV06300002</ID> <DATECREA>2007-09-25T14:38:28.0000000+02:00</DATECREA> <DATEMAJ>2010-10-13T11:42:11.0000000+02:00</DATEMAJ> .... </LISTING> <LISTING diffgr:id="LISTING2" msdata:rowOrder="0"> .... </LISTING> <LISTING diffgr:id="LISTING3" msdata:rowOrder="0"> .... </LISTING> .... </Listing> </diffgr:diffgram> </DataSet>
Ce qu'il y'a dans xs:schema ne m'intéresse pas. Ce que je veux, c'est récupérer les valeurs dans les champs contenus dans LISTING.
Avec mon code
me retourne bien DataSet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part out.println(racine.getName());
Par contre
me retourne null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part org.jdom.Element enfant = racine.getChild("diffgr:diffgram");
Je n'arrive donc pas à descendre dans l'arborescence.
Je pense que je fais une erreur stupide, mais je n'arrive pas à voir où et la documentation de jdom ne m'aide pas beaucoup
Merci de votre aide.
Partager