通过恢复PVSI验证后,XmlSchemaInfo.SchemaElement为null

时间:2013-04-19 17:48:32

标签: c#-4.0 linq-to-xml xsd-validation

我尝试使用已编译(和正确)的架构集验​​证XDocument并提供后验证架构信息(PVSI):

public void ValidateDoc(XDocument doc)
{
    if (doc == null)
        return;

    // _schema is correct filled schema-set
    if (!_schemas.IsCompiled)
        _schemas.Compile();

    try
    {
        _validated.Clear();
        if (_schemas.Count > 0)
            doc.Validate(_schemas, OnValidate, true);

        foreach (var item in _validated)
        {
            var si = item.GetSchemaInfo();
            // si exists and si.Validity is set to XmlSchemaValidity.Invalid but si.SchemaElement and si.SchemaAttribute is null
        }
    }
    catch (XmlSchemaException err)
    {
        _log.FatalException(string.Format("Failed to validate document {0} [{1}, {2}] ", doc.BaseUri, err.LineNumber, err.LinePosition), err);
    }
}

protected virtual void OnValidate(object sender, ValidationEventArgs args)
{
    if (ValidationEvent != null)
        ValidationEvent(sender, args);

    var xobj = sender as XObject;
    if (xobj != null)
    {
        xobj.AddAnnotation(new XmlErrInfo(args));
        if (xobj is XElement)
            _validated.Add((XElement)xobj);
    }
}

但.GetSchemaInfo()。SchemaElement为null(其他字段也为空),而不是指向已编译的架构元素(我需要在相同元素的未来验证场景中使用它)。它有什么问题或我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你想访问SchemaElement有效元素,我可以理解你的方法,但你似乎想要访问报告给事件处理程序的那些无效元素的SchemaElement。我认为这些属性不会填充无效节点。