Comment parser un XSD contenant un "import" ?
Bonjour,
J'ai ces deux fichiers XSD :
Code:
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:
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:
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