C#使用不带DOCTYPE字符串的DTD文件验证XML文件

C#使用不带DOCTYPE字符串的DTD文件验证XML文件,c#,xml,validation,dtd,C#,Xml,Validation,Dtd,我正在尝试编写一个C#类,该类使用位于另一个文件夹中的DTD文件验证xml文件,该文件夹与DOCTYPE字符串不在相对位置,到目前为止,我的代码如下所示: var settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; settings.ValidationType = ValidationType.DTD; sett

我正在尝试编写一个C#类,该类使用位于另一个文件夹中的DTD文件验证xml文件,该文件夹与DOCTYPE字符串不在相对位置,到目前为止,我的代码如下所示:

var settings = new XmlReaderSettings();
            settings.DtdProcessing = DtdProcessing.Parse;
            settings.ValidationType = ValidationType.DTD;
            settings.XmlResolver = new XmlUrlResolver();
            settings.ValidationEventHandler += new ValidationEventHandler(IsLoaded);

            using (var reader = XmlReader.Create(new StringReader(xmlString), settings))
            {
                while (reader.Read()) { }
                reader.Close();
            }

到目前为止,从xml文件中包含的DOCTYPE字符串加载DTD文件效果良好,但DTD文件本身必须保存在与程序执行位置相关的文件夹中。有没有一种方法可以与XmlResolver类混合,让它从硬盘上的另一个位置获取DTD文件,比如在“查找DTD文件”中传递绝对路径,而不是使用DOCTYPE字符串?

你看过这篇文章吗?因此,从我读到的内容来看,xml验证器必须使用DOCTYPE字符串中指定的DTD位置,并且我必须以某种方式更改DOCTYPE字符串以表示我的DTD文件的位置,对吗?对,但您可能在设置对象中没有该选项。您可以通过URL托管DTD吗?如果没有,是否可以在处理之前将DTD文件复制到DOCTYPE引用的同一文件夹?或者您可以在使用字符串替换(不确定这是否是最佳选项)处理xml文件之前更新该文件中的DOCTYPE吗?您看过这篇文章吗?因此,从我读到的内容来看,xml验证器必须使用DOCTYPE字符串中指定的DTD位置,并且我必须以某种方式更改DOCTYPE字符串以表示我的DTD文件的位置,对吗?对,但您可能在设置对象中没有该选项。您可以通过URL托管DTD吗?如果没有,是否可以在处理之前将DTD文件复制到DOCTYPE引用的同一文件夹?或者您可以在使用字符串替换处理xml文件之前更新该文件中的DOCTYPE(不确定这是否是最佳选项)