Bonsoir
voilà je voudrais faire une transformation d'un fichier XML en XSD. Je sais que ça apparaît abhérent mais au fait il se trouve que dans mon fichier XML il ya toute la description du schema XML correspondant. Pour être plus exhaustive voilà mon fichier xml par exemple:
et je devrais finir par avoir un fichier XSD ressemblant à ça :
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 <?xml version="1.0" encoding="UTF-8"?> <schema> <element> <name>EXEMPLE</name> <complexType> <sequence> <element> <name>TEST1</name> <type>xsd:string</type> <minOccurs>1</minOccurs> <maxOccurs>1</maxOccurs> </element> <element> <name>TEST2</name> <type>xsd:string</type> <minOccurs>1</minOccurs> <maxOccurs>1</maxOccurs> </element> <element> <name>TEST3</name> <type>xsd:string</type> <minOccurs>0</minOccurs> <maxOccurs>unbounded</maxOccurs> </element> <element> <name>TEST4</name> <type>xsd:string</type> <minOccurs>1</minOccurs> <maxOccurs>unbounded</maxOccurs> </element> </sequence> </complexType> </element> </schema>
J'arrive à lire mon fichier xml et à l'analyser grâce à SAX, mais là où j'ai une difficulté c'est comment construire le XSD correspondant.
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 <?xml version="1.0" encoding="ISO-8859-1"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="EXEMPLE"> <xsd:complexType> <xsd:sequence> <xsd:element name="TEST1" type="xsd:string"> </xsd:element> <xsd:element name="TEST2" type="xsd:string"> </xsd:element> <xsd:element maxOccurs="unbounded" name="TEST3" type="xsd:string"> </xsd:element> <xsd:element maxOccurs="unbounded" name="TEST4" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
Je vous donne ici mon fichier java. Vous constaterez que j'arrive bien à lire mon fichier xml puisque j'arrive à l'afficher mais pour l'instant j'ai réussi à reconstituer juste l'en-tête du xsd que j'arrive à afficher aussi:
Merci d'avance
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 package tests; import java.io.*; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.jdom.*; import org.jdom.output.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; public class XlmXsd { public static void main(String[] args)throws IOException { //analyse sax //Si l'utilisateur a oublié de passer //le nom du fichier XML en parametre => erreur if (args.length != 1) { System.err.println("Usage: AnalyseSAX fichierSourceXML"); System.exit (1); } //on lance l'analyseur avec le fichier XML en parametre DefaultHandler handler = new AnalyseSAX(); SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse( new File(args[0]), handler ); } catch (Throwable t) { //Si on a une erreur pendant l'analyse //t.printStackTrace (); // System.exit (1); } // System.exit (0); // Crée un espace de nom avec préfixe Namespace espaceNomctg = Namespace.getNamespace("xsd", "http://www.w3.org/2001/XMLSchema"); XlmXsd tuto = new XlmXsd(); Element racine = new Element("schema",espaceNomctg); Document document = new Document(racine); // si on veut afficher le fichier XML sur écran try { XMLOutputter sortie = new XMLOutputter(" ", true); sortie.output(document, System.out); } catch (java.io.IOException e){ e.printStackTrace(); } } public void error(SAXParseException e) throws SAXParseException{ throw e; } public void ajoutElement(Element titre, String element, String texte) { Element elementAjoute = new Element(element); elementAjoute.setText(texte); titre.addContent(elementAjoute); } }
Sabrina
Partager