【问题标题】:XmlDocument not performing validation?XmlDocument 不执行验证?
【发布时间】:2009-11-20 09:38:23
【问题描述】:

我有这个函数可以根据外部模式文件验证 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("nothing", xDoc);它返回 true,validationEventHandler 委托中的代码永远不会执行...(加载会引发异常,但我认为应该在委托中处理它...)你知道为什么吗?

【问题讨论】:

  • 你能试试把这个放在while (xReader.Read());在您的 XMLReader.Create 行之后。看看它是否执行你的 EventHandler

标签: c# xml validation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    我认为你需要这样做:

    xmlDoc.Validate(eventhandler);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 2020-09-17
      相关资源
      最近更新 更多