xmlns:information が含まれていない可能性のあるスキーマに対して XML ドキュメントを検証しています。では、そのようなドキュメント (またはそのスキーマ情報を持たないノード) に無効のフラグを立てるにはどうすればよいでしょうか? 私が質問しているのは、.NET では XML ドキュメントで適切に識別されたスキーマに対してのみ検証を行うことができ、スキーマに準拠していない XML が通過しないことを保証したいからです。
属性を追加したり、ファイルを保存したり、再ロードしたりすることなく、このスキーマを正確に検証するにはどうすればよいですか?
たとえば、これは機能します:
xmlDoc.Load(file);
xmlDoc.DocumentElement.SetAttribute("xmlns", "http://test.mysite.com/schemas/myschemas");
xmlDoc.DocumentElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema");
xmlDoc.DocumentElement.SetAttribute("xmlns:schemaLocation", "schemas/myschema.xsd");
xmlDoc.Save(file);
XmlSchema mySchema = XmlSchema.Read(XmlReader.Create("schemas/myschema.xsd"), settings_ValidationEventHandler);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.Schemas.Add(mySchema);
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
XmlReader reader = XmlReader.Create(file, settings);
xmlDoc.Load(reader);
しかし、これはしません:
xmlDoc.Load(file);
xmlDoc.DocumentElement.SetAttribute("xmlns", "http://test.mysite.com/schemas/myschemas");
xmlDoc.DocumentElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema");
xmlDoc.DocumentElement.SetAttribute("xmlns:schemaLocation", "schemas/myschema.xsd");
XmlSchema mySchema = XmlSchema.Read(XmlReader.Create("schemas/myschema.xsd"), settings_ValidationEventHandler);
xmlDoc.Schemas.Add(mySchema);
xmlDoc.Validate(settings_ValidationEventHandler);