我有这个函数用于针对外部模式文件验证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委托中的代码永远不会执行...(加载抛出异常,但我认为它应该在委托中处理......)你知道为什么吗?
答案 0 :(得分:0)
想想我找到了原因,但这只是我的猜测:
当在字符串中应该代表一个正确的xml文档只是一些字符串(如示例中的“无”)时,验证不会发生因为加载抛出异常,这根本不是一个xml。
答案 1 :(得分:0)