XmlDocument没有执行验证?

时间:2009-11-20 09:38:23

标签: c# xml validation

我有这个函数用于针对外部模式文件验证xml消息:

private bool IsValidMessage(string message, XmlDocument xDoc)
{   
    this.valid = true;

    byte[] bytes = Encoding.UTF8.GetBytes(message);

    MemoryStream ms = new MemoryStream(bytes);
    ms.Flush();
    ms.Position = 0;                                


    XmlReaderSettings xSettings = new XmlReaderSettings();
    xSettings.ValidationType = ValidationType.Schema;

    xSettings.Schemas = new System.Xml.Schema.XmlSchemaSet();
    xSettings.Schemas.Add(null, "message.xsd");
    xSettings.ValidationEventHandler += delegate(object sender, ValidationEventArgs e) {
        this.valid = false;
        ShowMessage("Wrong message format: " + message);
    };

    XmlReader xReader = XmlReader.Create(ms, xSettings);                                                                    
    xDoc.Load(xReader);                                                     
    return valid;
}

当我调用IsValidMesage(“没有”,xDoc)时;它返回true并且validationEventHandler委托中的代码永远不会执行...(加载抛出异常,但我认为它应该在委托中处理......)你知道为什么吗?

2 个答案:

答案 0 :(得分:0)

想想我找到了原因,但这只是我的猜测:

当在字符串中应该代表一个正确的xml文档只是一些字符串(如示例中的“无”)时,验证不会发生因为加载抛出异常,这根本不是一个xml。

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/ms162371.aspx

我认为你需要这样做:

xmlDoc.Validate(eventhandler);