Sử dụng một cấu hình để thực hiện xác thực, với nguồn là TextReader
.
Bạn có thể tự xác định XSD các XmlReader
là sử dụng nếu bạn không muốn dựa vào tờ khai trong tài liệu đầu vào (với XmlReaderSettings.Schemas
tài sản)
Một khởi đầu (chỉ giả tờ khai XSD sơ thẩm trong đầu vào tài liệu) sẽ là:
var settings = new XmlReaderSettings {
ConformanceLevel = ConformanceLevel.Document,
ValidationType = ValidationType.Schema,
ValidationFlags = XmlSchemaValidationFlags.ProcessSchemaLocation |
XmlSchemaValidationFlags.ProcessInlineSchema,
};
int warnings = 0;
int errors = 0;
settings.ValidationEventHandler += (obj, ea) => {
if (args.Severity == XmlSeverityType.Warning) {
++warnings;
} else {
++errors;
}
};
XmlReader xvr = XmlReader.Create(new StringReader(inputDocInString), settings);
try {
while (xvr.Read()) {
// do nothing
}
if (0 != errors) {
Console.WriteLine("\nFailed to load XML, {0} error(s) and {1} warning(s).", errors, warnings);
} else if (0 != warnings) {
Console.WriteLine("\nLoaded XML with {0} warning(s).", warnings);
} else {
System.Console.WriteLine("Loaded XML OK");
}
Console.WriteLine("\nSchemas loaded durring validation:");
ListSchemas(xvr.Schemas, 1);
} catch (System.Xml.Schema.XmlSchemaException e) {
System.Console.Error.WriteLine("Failed to read XML: {0}", e.Message);
} catch (System.Xml.XmlException e) {
System.Console.Error.WriteLine("XML Error: {0}", e.Message);
} catch (System.IO.IOException e) {
System.Console.Error.WriteLine("IO error: {0}", e.Message);
}
Có, tôi xác thực và lưu trữ nhiều tài liệu xml từ hệ thống bên thứ ba để sử dụng sau này. XSD luôn giống nhau, vì vậy gợi ý của bạn, biên dịch tập hợp lược đồ được nhiều ứng dụng, cảm ơn! – Hinek
'CachedSchemas' trong ví dụ này là gì? –
Chỉ cần một IDictionary để lưu trữ kết quả. –
sisve