Validate XSD against W3 XMLSchema.xsd
本文关键字:XMLSchema xsd W3 against XSD Validate | 更新日期: 2023-09-27 18:33:00
关于如何验证我的XSD的任何建议?
我想有一个单元测试来检查我的 XSD 的有效性,但我无法克服以下错误:
"出于安全原因,此XML文档中禁止DTD。若要启用 DTD 处理,请将 XmlReaderSettings 上的 DtdProcessing 属性设置为"分析",并将设置传递到 XmlReader.Create 方法中。
这似乎是因为 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);
}
}
}
在MSDN论坛上,我有一个非常好的建议 - 使用XmlSchemaSet.Compile,因为这会验证。