C# 根据W3 XMLSchema.XSD验证XSD

C# 根据W3 XMLSchema.XSD验证XSD,c#,xsd,C#,Xsd,关于如何验证我的XSD有什么建议吗 我希望有一个单元测试来检查我的XSD的有效性,但我无法通过以下错误: “出于安全原因,此XML文档中禁止DTD。若要启用DTD处理,请在XmlReaderSettings上设置DTD处理属性,以解析设置并将其传递给XmlReader.Create方法。” 这似乎是因为W3模式定义引用了DTD 这是单元测试(xUnit): namespace MyNamespace.Profile.Test { 使用制度; 使用System.IO; 使用System.Xml;

关于如何验证我的XSD有什么建议吗

我希望有一个单元测试来检查我的XSD的有效性,但我无法通过以下错误:

“出于安全原因,此XML文档中禁止DTD。若要启用DTD处理,请在XmlReaderSettings上设置DTD处理属性,以解析设置并将其传递给XmlReader.Create方法。”

这似乎是因为W3模式定义引用了DTD

这是单元测试(xUnit):

namespace MyNamespace.Profile.Test
{
使用制度;
使用System.IO;
使用System.Xml;
使用System.Xml.Schema;
使用Xunit;
公共类测试
{
[事实]
public void应验证profilesXSD()
{
字符串profilesXsd=“Profiles.xsd”;
Assert.DoesNotThrow(()=>ValidateXsd(profilesXsd));
}
私有静态void ValidateXsd(字符串路径)
{
常量字符串W3Schema=”http://www.w3.org/2001/XMLSchema.xsd";
var config=newXMLReaderSettings{ValidationType=ValidationType.Schema};
config.ValidationFlags |=XmlSchemaValidationFlags.ReportValidationWarnings;
config.ValidationFlags |=XmlSchemaValidationFlags.ProcessInlineSchema;
config.ValidationFlags |=XmlSchemaValidationFlags.ProcessSchemaLocation;
config.DtdProcessing=DtdProcessing.Parse;
config.xmlsolver=null;
config.ValidationEventHandler+=ValidationCallBack;
Add(null,W3Schema);
使用(var reader=XmlReader.Create(path,config))
{
while(reader.Read())
{
}
}
}
私有静态void ValidationCallBack(对象发送方,ValidationEventArgs ValidationEventArgs)
{
控制台写入线(
ValidationEventTargets.Severity==XmlSeverityType.Warning
?“\t警告:未找到匹配的架构。未进行验证。{0}”
:“\t验证错误:{0}”,
validationEventArgs.Message);
}
}
}
在上一节课上,我有一个非常好的建议-使用XmlSchemaSet.Compile进行验证