繁体   English   中英

通过dtd验证xml,这是dtd的其他目录

[英]Validate xml via dtd, different directory for 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 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;
    }

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

感谢您的时间。

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

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

<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">

查看该Wiki页面该站点,以获取有关Xml文件和DTD关联的更多选项和信息。

dtd本地放置的示例(SYSTEM):

如何从文档中引用DTD

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

<!DOCTYPE spec SYSTEM "dtds/mydtd">

注意事项

系统字符串实际上是URI参考(在RFC 2396中定义),因此您可以使用完整的URL字符串来指示DTD在Web上的位置。 如果您希望其他人验证您的文档,这是一件非常好的事情。 也可以关联PUBLIC标识符(魔术字符串),以便在客户端的目录中查找DTD,而不必在网络上定位它。 DTD包含一组元素和属性声明,但它们并未定义文档的根目录。 作为DOCTYPE声明的第一个元素,这明确地告知解析器/验证器。

(摘自这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM