コンパイル済み (および正しい) スキーマ セットを使用し、検証後のスキーマ情報 (PVSI) を提供して、XDocument を検証しようとしました。
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 (および他のフィールドも空) です (同じ要素の将来の検証シナリオで使用する必要があります)。それの何が問題なのですか、それとも私が間違っているのですか?