2012-06-05 100 views
1

我有這樣的代碼:爲什麼XmlDocument Validate事件處理程序沒有被擊中?

// Load the document 
    XmlDocument xmlDocument = new XmlDocument(); 

    // use the stream and have it close when it is finished 
    using (argInputStream) 
    { 
    xmlDocument.Load(argInputStream); 
    xmlDocument.Schemas.Add(XmlSchema.Read(argSchemaStream, null)); 
    xmlDocument.Validate(ValidationEventHandler); 
    } 

// this is not getting hit 
void ValidationEventHandler(object sender, ValidationEventArgs e) 
{ 
    switch (e.Severity) 
    { 
    case XmlSeverityType.Error: 
     Console.WriteLine("Error: {0}", e.Message); 
     break; 
    case XmlSeverityType.Warning: 
     Console.WriteLine("Warning {0}", e.Message); 
     break; 
    } 
} 

頂線我的XSD的:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

任何想法?

+1

由於您的文檔是有效的,也許? –

+0

我已將其設爲無效。 –

回答

3

我有一些代碼驗證xml使用這種結構。

var schemaReader = new XmlTextReader(argSchemaStream); 
var schema = new XmlSchemaSet(); 
schema.Add(null, schemaReader); 

var settings = new XmlReaderSettings(); 
settings.ValidationType = ValidationType.Schema; 
settings.Schemas.Add(schema); 
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; 
settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler); 

var doc = new XmlDocument(); 
doc.Load(XmlReader.Create(argInputStream, settings)); 
0

我不認爲這是驗證的正確方法;試試這個MSDN link。基本上,模式似乎與XmlReaderSettings相反。

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add(...); 
settings.ValidationType = ValidationType.Schema; 

XmlReader reader = XmlReader.Create(..., settings); 
XmlDocument document = new XmlDocument(); 
document.Load(reader); 

document.Validate(eventHandler); 
+0

-1作爲問題作者正在做的事情,將XML模式加載到'XmlDocument.Schemas'屬性中是完全可以接受的。此外,你說*模式似乎與XmlReaderSettings而不是* ...但是'XmlReaderSettings'去哪裏?這是正確的......通過'XmlReader'進入'XmlDocument' ...所以它實際上更快地完成問題作者的方式。 – Sheridan

+0

@Sheridan,我說,'我不認爲這是validating'的正確方法是在其中的代碼編寫背景下的原因......我基本上指出'當一個XmlDocument對象與XML初始化從XmlReader對象數據,所述的XmlSchemaSet對象從的XmlReader object.'的架構屬性[XmlDocument.Schemas,備註](http://msdn.microsoft.com/en-us/library/system.xml.xmldocument加載.schemas.aspx) –

+0

我真的不知道你試圖在你的迴應說,但你真的只是做*我*點,我與你提供給'XmlDocument.Schemas'頁MSDN上的鏈接...它說* XmlSchemaSet對象是從XmlReader對象的Schemas屬性中加載的...... [和我的觀點是] ...它被加載到* XmlDocument.Schemas屬性的XmlSchemaSet中。 。問題作者首先把它放在哪裏。 – Sheridan

相關問題