【发布时间】: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