Bonjour,
J'ai ces deux fichiers XSD :
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 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/create02" xmlns:tns="http://xml.netbeans.org/schema/create02" elementFormDefault="qualified"> <xsd:element name="elements" type="tns:attributes"/> <xsd:complexType name="attributes"> <xsd:sequence> <xsd:element name="objectClass" maxOccurs="unbounded" type="xsd:string"/> <xsd:element name="cn" maxOccurs="unbounded"/> <xsd:element name="sn"/> <xsd:element name="displayName" minOccurs="0"/> <xsd:element name="givenName" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="initials" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="mail" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="uid" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="userPassword" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
J'utilise ce code Java pour parser le XSD et récuperer le nom des éléments qu'il contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/create01" xmlns:tns="http://xml.netbeans.org/schema/create01" elementFormDefault="qualified"> <xsd:include schemaLocation="/chemin_complet/create02.xsd" /> <xsd:complexType name="attributes"> <xsd:sequence> <xsd:element name="objectClass" maxOccurs="unbounded" type="xsd:string"/> <xsd:element name="ou" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="elements" type="tns:attributes"/> </xsd:schema>
Lorsque je passe le fichier create01.xsd à ma méthode, celle ci ne m'affiche que les éléments du fichier "create01.xsd".
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 public void test(String xsd) { try { // open the XSD file DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File(xsd)); // Get the "sequence" node Element racine = doc.getDocumentElement(); NodeList list = racine.getElementsByTagName("xsd:complexType"); // Get all "element" nodes for (int k=0 ; k<list.getLength() ; k++) { Element nRac = (Element)list.item(k); NodeList nList = nRac.getElementsByTagName("xsd:element"); // Get element name if "minOccurs" > 0 for (int i=0 ; i<nList.getLength() ; i++) { Element e = (Element)nList.item(i); System.out.println("nom: " + e.getAttribute("name")); } } } catch (Exception e) { e.printStackTrace(); } }
Or "create01.xsd" contenant un import du fichier "create02.xsd", j'aurais voulu que ma méthode m'affiche les éléments de "create01.xsd" ET "create02.xsd".
Comment puis-je faire celà ? c'est à dire, comment faire pour que ma méthode aille parser les XSD importés ?
Merci
Partager