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>

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>
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
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();
        }
    }
Lorsque je passe le fichier create01.xsd à ma méthode, celle ci ne m'affiche que les éléments du fichier "create01.xsd".

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