0

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

4

1 に答える 1

1

有効な要素にアクセスしたい場合は、アプローチを理解できましたが、イベント ハンドラーに報告された無効な要素SchemaElementにアクセスしたいようです。SchemaElementこれらのプロパティが無効なノードに設定されているとは思いません。

于 2013-04-21T14:16:21.390 に答える