2011-09-19 4 views
3

들어오는 입력 xmlDocument를 기존 XmlSchemaSet에 대해 유효성을 검사하려고합니다. 코드는 다음과 같습니다.XmlDocument.Validate가 여러 오류에 대해 실행되지 않습니다.

public class ValidateSchemas 
{ 
    private bool _isValid = true; 

    public List<string> errorList = new List<string>(); 

    public bool ValidateDocument(XmlDocument businessDocument) 
    { 
     XmlSchemaSet schemaSet = SchemaLoader.Loader(); 
     bool isValid = Validate(businessDocument, SchemaLoader._schemaSet); 
     return isValid; 
    } 

    public bool Validate(XmlDocument document, XmlSchemaSet schema) 
    { 
     ValidationEventHandler eventHandler = new ValidationEventHandler(HandleValidationError); 
      document.Schemas = schema; 
      document.Validate(eventHandler); 
      return _isValid; 
    } 

    private void HandleValidationError(object sender, ValidationEventArgs ve) 
    { 
     _isValid = false; errorList.Add(ve.Message); 
    } 
} 

코드가 유효성 검증 관점에서 잘 작동합니다. 그러나 errorList는 첫 번째 노드 오류 만 캡처합니다. 다른 노드 오류는 캡처하지 않습니다. 사건이 한 번만 해고 된 것 같습니다. 이것을 성취하는 방법, 도와주세요. 내가 xmldocument를 입력으로 사용하고 있으므로 독자를 사용하지 않는다는 점에 유의하십시오.

+0

나는 똑같은 것을 찾고 있었지만 그것으로는 불가능한 것 같습니다. – juFo

+0

XDocument.Validate는 가능한 경우 여러 오류를 반환하는 것으로 보입니다. –

답변

1

정확히 XmlDocument.Validate 메서드의 예상되는 동작입니다. 유효성 검증 오류를 찾으면 프로세스의 유효성을 검증하지 않고 오류를 리턴합니다. 따라서 사용자는 오류를 수정하고 다시 유효성을 검사해야합니다.

이 동작은 Visual Studio 오류 목록과 다릅니다. 예를 들어, 코드에서 단일 구문 오류가있는 경우 가끔 오류 100s를 반환합니다. 하지만 실제로는 한 곳에서만 하나만 고쳐야합니다. 따라서 장단점은 환경에 따라 다를 수 있습니다. 그러나 XMLDocument에 대한 모든 유효성 검사 오류를 쉽게 얻을 수 있다고 생각하지는 않습니다. 본질적으로 다른 방식으로 작동합니다.

관련 문제