C# 通过dtd验证xml,dtd的不同目录

C# 通过dtd验证xml,dtd的不同目录,c#,xml,xml-validation,dtd,C#,Xml,Xml Validation,Dtd,我试图通过.dtd验证xml文件。我写了这个验证器: public bool Validation(XmlDocument xmlDoc) { var xml = XmldocToString(xmlDoc); var r = new XmlTextReader(new StringReader(xml)); var settings = new XmlReaderSettings(); var sb = new S

我试图通过.dtd验证xml文件。我写了这个验证器:

    public bool Validation(XmlDocument xmlDoc)
    {
        var xml = XmldocToString(xmlDoc);
        var r = new XmlTextReader(new StringReader(xml));
        var settings = new XmlReaderSettings();
        var sb = new StringBuilder();
        settings.ProhibitDtd = false;
        settings.ValidationType = ValidationType.DTD;
        settings.ValidationEventHandler += (a, e) =>
        {
            sb.AppendLine(e.Message);
            _isValid = false;
        };
        XmlReader validator = XmlReader.Create(r, settings);
        while (validator.Read())
        {
        }
        validator.Close();

        return _isValid;
    }
问题是我必须将dtd文件放在解决方案的bin目录中。我想选择一个不同的目录来保存.dtd文件,但我真的找不到如何保存


感谢您抽出时间。

在Xml文件中声明与DTD的关联:

dtd存储在远程服务器中的示例:

请看一下这一点,并从中获取有关Xml文件和DTD关联的更多选项和信息

dtd放置在本地(系统)的示例: 如何从文档中引用DTD

假设文档的顶部元素是spec,并且dtd已放置 在目录的子目录dtds中的文件mydtd中 已加载文档


注释

系统字符串实际上是一个URI引用(如RFC中定义的) 2396),这样您就可以使用完整的URL字符串来指示 网络上的DTD。如果你想要别人,这真的是一件好事 以验证您的文档。也可以将公共关系关联起来 标识符(一个神奇的字符串),以便在目录中查找DTD 在客户端,而不必在web上定位它。DTD 包含一组元素和属性声明,但它们没有 定义文档的根目录。这是明确的 作为DOCTYPE的第一个元素告知解析器/验证器 声明


(摘自)

存储在xml文件中的预期dtd是这样的:您的意思是我应该通过更改xml文件来重定向dtd调用吗?谢谢您抽出时间。但我不想验证我的文档,而是其他人的文档,所以我宁愿避免修改它们。我希望能够调整解析器/验证器以从我喜欢的目录中获取DTD。现在xml文件位于DTD的同一目录中,即“bin”目录,对吗?如果是这样,您能将这两个文件移动到您喜欢的另一个目录吗?另一个方法是在tmx14.dtd文件的bin目录中放置一个符号链接,并将实际文件放在您想要的任何位置。
<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">
<!DOCTYPE spec SYSTEM "dtds/mydtd">