Я пытаюсь проверить файл XML на соответствие его схеме.Это мой код:
private readonly List<string> validationErrors = new List<string>();
public bool TryValidate(string xml, string schemaLocation, ref List<string> errors)
{
var document = new XmlDocument();
document.LoadXml(xml);
var schemaReader = new XmlTextReader(schemaLocation);
var settings = new XmlReaderSettings {CloseInput = true};
settings.ValidationEventHandler += Handler;
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, schemaReader);
var stringReader = new StringReader(xml);
using (var validatingReader = XmlReader.Create(stringReader, settings))
{
while (validatingReader.Read())
{
}
}
errors = validationErrors;
return errors.Count == 0;
}
private const string Format = "Line: {0}, Position: {1} \"{2}\"";
private void Handler(object sender, ValidationEventArgs e)
{
if (e.Severity != XmlSeverityType.Error)
{
return;
}
validationErrors.Add(string.Format(Format,
e.Exception.LineNumber,
e.Exception.LinePosition,
e.Exception.Message));
}
Схема имеет следующие ограничения для элементов BusinessType:
<xs:element name="BusinessType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="15"/>
<xs:enumeration value="not specified"/>
<xs:enumeration value="Sole trader"/>
<xs:enumeration value="Partnership"/>
<xs:enumeration value="Limited company"/>
</xs:restriction>
</xs:simpleType>
<xs:element>
Но фактический файл экземпляра Xml содержит элемент с нулем в нем:
<BusinessType>0</BusinessType>
И все же, когда я запускаю код проверки, он проходит проверку схемы (т.е. ошибок не обнаружено)?Редактировать - в качестве теста я также полностью переименовал один из элементов, и он все еще не выдавал ошибку!
Кто-нибудь знает, почему это может быть?
Большое спасибо