2012-06-05 54 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

相关问题