Je souhaite valider des fichiers XML par rapport au schéma suivant
J'ai le fichier XML suivant:
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 <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="firm:invoice" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="1.0"> <xsd:element name="invoice"> <xsd:complexType> <xsd:sequence> <xsd:element name="client"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"></xsd:element> <xsd:element name="firstname" type="xsd:string"></xsd:element> <xsd:element name="address"> <xsd:complexType> <xsd:sequence> <xsd:element name="street" type="xsd:string"> </xsd:element> <xsd:element name="postalCode" type="xsd:string"> </xsd:element> <xsd:element name="City" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="articles" maxOccurs="1" minOccurs="1"> <xsd:complexType> <xsd:sequence> <xsd:element name="article" maxOccurs="unbounded" minOccurs="1"> <xsd:complexType> <xsd:sequence> <xsd:element name="id" type="xsd:string"> </xsd:element> <xsd:element name="description" type="xsd:string"> </xsd:element> <xsd:element name="quantity" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
Je valide le fichier à l'aide du code suivant:
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 <?xml version="1.0" encoding="UTF-8"?> <invoice xmlns="firm:invoice"> <client> <name>Dupont</name> <firstname>Franck</firstname> <address> <street>32, rue de la paix</street> <postalCode>75001</postalCode> <City>Paris</City> </address> </client> <articles> <article> <id>1</id> <description>article 1</description> <quantity>1</quantity> </article> <article> <id>23</id> <description>article 2</description> <quantity>3</quantity> </article> <article> <id>78</id> <description>article 3</description> <quantity>2</quantity> </article> <article> <id>14</id> <description>article 4</description> <quantity>1</quantity> </article> </articles> </invoice>
J'obtiens alors l'erreur suivante:
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 import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.w3c.dom.Document; public class SchemaValidationTests { /** * @param args */ public static void main(String[] args) { try { Document document_l = null; DocumentBuilder parser_l; DocumentBuilderFactory docFactory_l = DocumentBuilderFactory.newInstance(); docFactory_l.setNamespaceAware(true); parser_l = docFactory_l.newDocumentBuilder(); document_l = parser_l.parse(SchemaValidationTests.class.getResourceAsStream("invoice.xml")); SchemaFactory factory_l = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Source[] sources_l = new Source[] { new StreamSource(SchemaValidationTests.class.getResourceAsStream("invoice.xsd")) }; Schema schema_l = factory_l.newSchema(sources_l); Validator validator_l = schema_l.newValidator(); validator_l.validate(new DOMSource(document_l)); } catch (Exception e) { e.printStackTrace(); } } }
ERREUR : 'cvc-complex-type.2.4.a: Invalid content was found starting with element 'client'. One of '{"":client}' is expected.'
Ou est mon erreur ? Merci pour votre aide.
Partager