Validation d'un xml via xsd : Element non déclaré!
bonjour,
je voudrais valider un xml via un schema xsd .
J'ai à chaque fois une erreur concernant l'element racine qui est soit-disant non déclaré, si vous pouviez m'éclairer parce que la je tourne en rond et je ne trouve pas :
voila mon code :
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 41 42
|
string s ="<?xml version='1.0' encoding='UTF-8'?>";
s +="<query>";
s +="<doctypes>";
s +=" <doctype Id='IDs'/> ";
s +="</doctypes>";
s +="<params>";
s +=" <wordparam FieldId='xCollec'>";
s +=" <expression> mon expression </expression>";
s +=" </wordparam>";
s +=" <dateparam FieldId='iDate'>";
s +=" <from>2008-01-01</from>";
s +=" <to>2008-01-31</to>";
s +=" </dateparam>";
s += " <stringparam FieldId='iRef'>";
s +=" <value></value>";
s += " </stringparam>";
s +="</params>";
s += "<orderby FieldId='iDate' Option='descending'/>";
s +="</query>";
//chargement du schema xml
XmlSchema xSchema = new XmlSchema();
xSchema.SourceUri = Context.Server.MapPath("~/searchParams.xsd");
XmlReaderSettings xSettings = new XmlReaderSettings();
xSettings.IgnoreComments = true;
xSettings.IgnoreWhitespace = true;
xSettings.Schemas.Add(xSchema);
xSettings.ValidationType = ValidationType.Schema;
xSettings.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
XmlReader xReader = XmlReader.Create(new StringReader(s), xSettings);
while (xReader.Read()) {}
xReader.Close();
private static void ValidationCallback(Object sender, ValidationEventArgs args)
{
if (sXmlValidationErrors != string.Empty) sXmlValidationErrors += "|";
sXmlValidationErrors += args.Message;
} |
voici le xsd :
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 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- ATTRIBUTS -->
<xs:attribute name="Id" type="xs:string"/>
<xs:attribute name="FieldId" type="xs:string"/>
<xs:attribute name="Option" type="xs:string"/>
<!-- SIMPLE ELEMENTS -->
<xs:element name="expression" type="xs:string"/>
<xs:element name="from" type="xs:date"/>
<xs:element name="to" type="xs:date"/>
<xs:element name="From" type="xs:time"/>
<xs:element name="To" type="xs:time"/>
<xs:element name="value" type="xs:string"/>
<!-- EMPTY ELEMENTS LVL 2-->
<xs:element name="doctype">
<xs:complexType>
<xs:attribute ref="Id" use="required"/>
</xs:complexType>
</xs:element>
<!-- EMPTY ELEMENTS LVL 1-->
<xs:element name="orderby">
<xs:complexType>
<xs:attribute ref="FieldId" use="required"/>
<xs:attribute ref="Option" use="required"/>
</xs:complexType>
</xs:element>
<!-- COMPLEX ELEMENTS LVL 2 -->
<xs:element name="wordparam">
<xs:complexType>
<xs:sequence>
<xs:element ref="expression"/>
</xs:sequence>
<xs:attribute ref="FieldId" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="csvparam">
<xs:complexType>
<xs:sequence>
<xs:element ref="value"/>
</xs:sequence>
<xs:attribute ref="FieldId" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="stringparam">
<xs:complexType>
<xs:sequence>
<xs:element ref="value"/>
</xs:sequence>
<xs:attribute ref="FieldId" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="dateparam">
<xs:complexType>
<xs:sequence>
<xs:element ref="from"/>
<xs:element ref="to"/>
</xs:sequence>
<xs:attribute ref="FieldId" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="timeparam">
<xs:complexType>
<xs:sequence>
<xs:element ref="From"/>
<xs:element ref="To"/>
</xs:sequence>
<xs:attribute ref="FieldId" use="required"/>
</xs:complexType>
</xs:element>
<!-- COMPLEX ELEMENTS LVL 1 -->
<xs:element name="doctypes">
<xs:complexType>
<xs:sequence>
<xs:element ref="doctype"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="params">
<xs:complexType>
<xs:sequence>
<xs:element ref="wordparam" minOccurs="0"/>
<xs:element ref="dateparam" minOccurs="0"/>
<xs:element ref="timeparam" minOccurs="0"/>
<xs:element ref="csvparam" minOccurs="0"/>
<xs:element ref="stringparam" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- PRINCIPAL -->
<xs:element name="query">
<xs:complexType>
<xs:sequence>
<xs:element ref="doctypes"/>
<xs:element ref="params"/>
<xs:element ref="orderby"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> |
l'erreur de retour est "L'élément 'query' n'est pas déclaré."
ce qui est le plus etrange c que quand je fais le test directement dans un logiciel de traitement xml ( stylus ) , la validation se passe sans probleme !!!!
par avance merci pour votre aide
A++