0
關於如何驗證我的XSD的任何建議?針對W3驗證XSD XMLSchema.xsd
我想有一個單元測試,檢查我的XSD的有效性,但我不能讓過去的以下錯誤:
"For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method."
這似乎是因爲W3模式定義引用的DTD。
這是單元測試(的xUnit):
namespace MyNamespace.Profile.Test
{
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using Xunit;
public class ProfilesSchemaTests
{
[Fact]
public void ShouldValidateProfilesXsd()
{
string profilesXsd = "Profiles.xsd";
Assert.DoesNotThrow(() => ValidateXsd(profilesXsd));
}
private static void ValidateXsd(string path)
{
const string W3Schema = "http://www.w3.org/2001/XMLSchema.xsd";
var config = new XmlReaderSettings { ValidationType = ValidationType.Schema };
config.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
config.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
config.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
config.DtdProcessing = DtdProcessing.Parse;
config.XmlResolver = null;
config.ValidationEventHandler += ValidationCallBack;
config.Schemas.Add(null, W3Schema);
using (var reader = XmlReader.Create(path, config))
{
while (reader.Read())
{
}
}
}
private static void ValidationCallBack(object sender, ValidationEventArgs validationEventArgs)
{
Console.WriteLine(
validationEventArgs.Severity == XmlSeverityType.Warning
? "\tWarning: Matching schema not found. No validation occurred. {0}"
: "\tValidation error: {0}",
validationEventArgs.Message);
}
}
}