私は入力文書を遵守するためのスキーマを持っているとしましょう。私はこのようなスキーマに従ってファイルを読み込む:.NETで指定されたスキーマに強制的に準拠させる方法はありますか?
// Load the ABC XSD
var schemata = new XmlSchemaSet();
string abcSchema = FooResources.AbcTemplate;
using (var reader = new StringReader(abcSchema))
using (var schemaReader = XmlReader.Create(reader))
{
schemata.Add(string.Empty, schemaReader);
}
// Load the ABC file itself
var settings = new XmlReaderSettings
{
CheckCharacters = true,
CloseInput = false,
ConformanceLevel = ConformanceLevel.Document,
IgnoreComments = true,
Schemas = schemata,
ValidationType = ValidationType.Schema,
ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings
};
XDocument inputDoc;
try
{
using (var docReader = XmlReader.Create(configurationFile, settings))
{
inputDoc = XDocument.Load(docReader);
}
}
catch (XmlSchemaException xsdViolation)
{
throw new InvalidDataException(".abc file format constraint violated.", xsdViolation);
}
これは、ファイル内の些細なエラーを検出で正常に動作します。ただし、スキーマが名前空間にロックされているため、以下のような文書は無効であるが、通じ潜入:
<badDoc xmlns="http://Foo/Bar/Bax">
This is not a valid document; but Schema doesn't catch it
because of that xmlns in the badDoc element.
</badDoc>
私はスキーマを持っている唯一の名前空間がスキーマ検証に合格する必要があることを言いたいです。
動作しませんでした。無効な文書を引き渡します。それに応じてサンプルコードを更新しました。 –