J'ai un fichier xml, et un schéma xsd.
Comment faire pour vérifier si mon fichier xml est valide par rapport au schéma xsd ?
Merci beaucoup
Version imprimable
J'ai un fichier xml, et un schéma xsd.
Comment faire pour vérifier si mon fichier xml est valide par rapport au schéma xsd ?
Merci beaucoup
tu bosses avec VS ?
si oui ouvre le fichier xml dans l'editeur > XML > Valider les données XML...
Non pas sur VS.
Mais dans mon application.
Je récupere in fichier XML et je voudrais savoir si ce fichier xml est construit comme je le veux.
:arrow: Classe XmlValidatingReader ? :idea:
J'ai fait ceci. Mais ca plante
A a ligneCode:
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 //XmlTextReader myXmlTextReader = new XmlTextReader (nomFichierConfig); //XmlValidatingReader myXmlValidatingReader = new XmlValidatingReader (myXmlTextReader); string nomFichierConfig="config.xml"; XmlValidatingReader myXmlValidatingReader = new XmlValidatingReader (new XmlTextReader(new StreamReader(nomFichierConfig))); myXmlValidatingReader.ValidationType = ValidationType.Schema; System.Xml.Schema.XmlSchemaCollection schemaCollection = new System.Xml.Schema.XmlSchemaCollection(); schemaCollection.Add("schema.xsd", nomFichierConfig); myXmlValidatingReader.Schemas.Add(schemaCollection); try { // Read XML data while (myXmlValidatingReader.Read()){} Console.WriteLine ("Validation finished. Validation"); } catch (XmlException e) { Console.WriteLine ("XmlException: " + e.ToString()); } catch (Exception e) { Console.WriteLine ("Exception: " + e.ToString()); }
J'ai cette erreurCode:schemaCollection.Add("schema.xsd", nomFichierConfig);
Merci beaucoup de votre aideCitation:
Une exception non gérée du type 'System.Xml.Schema.XmlSchemaException' s'est produite dans system.xml.dll
Informations supplémentaires*: Erreur système.
Peux-tu catcher ces lignes pour avoir un message complet de l'exception
Sinon attention pour la méthode XmlSchemaCollection.Add (String, String)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
30
31
32
33
34
35
36
37
38
39
40 using System; using System.IO; using System.Xml; using System.Xml.Schema; //... string configPath ="config.xml"; StreamReader mySR = null; XmlTextReader myXTR = null; XmlValidatingReader myXVR = null; XmlSchemaCollection mySC = new XmlSchemaCollection(); try { mySR = new StreamReader(ConfigPath); myXTR = new XmlTextReader(mySR); myXVR= new XmlValidatingReader(myXTR); myXVR.ValidationType = ValidationType.Schema; mySC.Add("schema.xsd", configPath); myXVR.Schemas.Add(mySC); while (myXVR.Read()) { //... } Console.WriteLine ("Validation finished. Validation"); } catch (XmlException e) { Console.WriteLine ("XmlException: " + e.Message); } catch (Exception e) { Console.WriteLine ("Exception: " + e.Message); } finally { // fermer et disposer tout ce qui est necessaire }
Citation:
Envoyé par MSDN
Voici mon erreur
Mon fichier XMLCitation:
XmlException: Marque d'ordre d'octet Unicode manquante. Impossible de basculer en Unicode.
Et mon schéma xsdCitation:
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<config>
<BD>
<user>toto</user>
</BD>
<Dossier>
<tmp>"e:\tmp"</tmp>
<general>"e:\general\"</general>
</Dossier>
</config>
SInon ne serait-il pas mieux de le faire avec un DTD ? Mais comment fait-on à partir d'un fichier xml existant ?Citation:
<?xml version="1.0"?>
<xs:schema id="config" targetNamespace="http://tempuri.org/XMLFile1.xsd" xmlns:mstns="http://tempuri.org/XMLFile1.xsd" xmlns="http://tempuri.org/XMLFile1.xsd" xmlns: xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com: xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="config" msdata:IsDataSet="true" msdata:Locale="fr-FR" msdata:EnforceConstraints="False">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="BD">
<xs:complexType>
<xs:sequence>
<xs:element name="user" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Dossier">
<xs:complexType>
<xs:sequence>
<xs:element name="tmp" type="xs:string" minOccurs="0" />
<xs:element name="general" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
merci beaucoup
Finallement je l'ai fait avec un DTD, ca fonctionne.
Or si dans mon fichier xml, j'enleve la ligne
Quel que soit la manière dont est fait le fichier xml, il me le valide.Citation:
<!DOCTYPE config SYSTEM "schema.dtd">
Comment faire pour vérifier que mon fichier xml a un doctype ?