C# で参照された XSD に対して XML を検証する 質問する

C# で参照された XSD に対して XML を検証する 質問する

次のような指定されたスキーマの場所を持つ XML ファイルがあります。

xsi:schemaLocation="someurl ..\localSchemaPath.xsd"

C# で検証したいです。Visual Studio でファイルを開くと、スキーマに対して検証が行われ、エラーが適切にリストされます。しかし、次のように検証するスキーマを指定しないと、C# で自動的に検証できないようです。

XmlDocument asset = new XmlDocument();

XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);

asset.Schemas.Add(schema);

asset.Load(filename);
asset.Validate(DocumentValidationHandler);

XML ファイルで指定されたスキーマを使用して自動的に検証できないのでしょうか? 何が足りないのでしょうか?

ベストアンサー1

XmlReaderSettings インスタンスを作成し、作成時にそれを XmlReader に渡す必要があります。その後、ValidationEventHandler設定で をサブスクライブして検証エラーを受信できます。コードは次のようになります。

using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD
{
    public static void Main()
    {

        // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
        settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

        // Parse the file. 
        while (reader.Read()) ;

    }
    // Display any warnings or errors.
    private static void ValidationCallBack(object sender, ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
        else
            Console.WriteLine("\tValidation error: " + args.Message);

    }
}

おすすめ記事