Je ne connais pas assez l'espace de noms XML pour voir mon erreur. Le faites vous?Comment valider XML contre schéma (XSD)? Quelque chose ne va pas
public static bool ValidateXml(string xml, string xsd)
{
try
{
// build XSD schema
StringReader _XsdStream;
_XsdStream = new StringReader(xsd);
XmlSchema _XmlSchema;
_XmlSchema = XmlSchema.Read(_XsdStream, null);
// build settings (this replaces XmlValidatingReader)
XmlReaderSettings _XmlReaderSettings;
_XmlReaderSettings = new XmlReaderSettings()
{
ValidationType = ValidationType.Schema
};
_XmlReaderSettings.Schemas.Add(_XmlSchema);
// build XML reader
StringReader _XmlStream;
_XmlStream = new StringReader(xml);
XmlReader _XmlReader;
_XmlReader = XmlReader.Create(_XmlStream, _XmlReaderSettings);
// validate
using (_XmlReader)
{
while (_XmlReader.Read())
;
}
// validation succeeded
return true;
}
catch
{
// validation failed
return false;
}
}
Voici le XSD
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://server.com/www/content" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ads">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="ad">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="date" type="xs:string" use="required" />
<xs:attribute name="checksum" type="xs:string" use="required" />
<xs:attribute name="size" type="xs:string" use="required" />
<xs:attribute name="expanded-size" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="last-modified" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Voici le XML
<?xml version="1.0" encoding="UTF-8" ?>
<ads xmlns="http://server.com/www/content" last-modified="">
<ad id="ad1" date="" checksum="" size="" expanded-size=""/>
<ad id="ad2" date="" checksum="" size="" expanded-size=""/>
<ad id="ad3" date="" checksum="" size="" expanded-size=""/>
</ads>
La méthode doit retourner faux, mais il est vrai retournaient. Honnêtement, je ne sais pas par où débuter ce débogage. : S
Merci d'avance pour votre temps et votre réponse.
Au lieu d'attraper l'exception et de retourner false, pouvez-vous laisser sauter et couper-n-coller l'exception que vous recevez? – sarnold