2011-09-19 44 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在可能的情況下似乎返回多個錯誤。 – 2013-02-03 22:01:40

回答

1

這正是XmlDocument.Validate方法的預期行爲。一旦發現驗證錯誤,它將停止驗證過程並返回錯誤。因此,用戶必須修復該錯誤並再次驗證。

此行爲與Visual Studio錯誤列表不同。例如,如果代碼中有單個語法錯誤,有時會返回100個錯誤。但實際上你必須在一個地方只修理一個。所以,可以有利有弊取決於情況。但是,我不認爲你可以輕易地獲得XMLDocument的所有驗證錯誤,它本質上以不同的方式工作。