Проверка схемы XML не обнаружила ошибок проверки - PullRequest
1 голос
/ 20 декабря 2011

Я пытаюсь проверить файл 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>

И все же, когда я запускаю код проверки, он проходит проверку схемы (т.е. ошибок не обнаружено)?Редактировать - в качестве теста я также полностью переименовал один из элементов, и он все еще не выдавал ошибку!

Кто-нибудь знает, почему это может быть?

Большое спасибо

...