2012-01-27 134 views
3

我想验证具有XSD模式的XML文件。我用:在C#中通过XSD验证XML并访问无效元素

var settings = new XmlReaderSettings(); 
settings.ValidationFlags = XmlSchemaValidationFlags.AllowXmlAttributes 
    | XmlSchemaValidationFlags.ProcessIdentityConstraints 
    | XmlSchemaValidationFlags.ProcessInlineSchema   
    | XmlSchemaValidationFlags.ReportValidationWarnings; 
settings.ValidationType = ValidationType.Schema; 
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler); 
settings.Schemas.Add(xsc); 
var vreader = XmlReader.Create(stream, settings); 
while (vreader.Read()); 

如果出现一些错误,然后我在我的处理程序中有美丽的人类可读信息。但我想知道导致错误的节点。没有像XmlElement这样的对象。有没有办法做到这一点?

回答

1

我不知道如何做到这一点的简单方法...我首先看看与节点关联的SchemaInfo属性;直觉上,根据错误,你可能根本不明白...

这些之间唯一的其他“关键”可能是行/列号,然后可以交叉索引(你需要read this然后,正在使用Xml.Linq)。