在C#中通过XSD验证XML,并且可以访问无效元素

时间:2012-01-27 08:29:26

标签: c# xml validation xsd

我想验证具有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 个答案:

答案 0 :(得分:1)

我不知道如何做到这一点的简单方法......我首先看一下与节点相关的SchemaInfo属性;直观地说,根据错误,你可能根本不会得到它......

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