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

时间:2012-11-09 07:08:56

标签: c# xml dtd xml-validation xml-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文件,我真的找不到。

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

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

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

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

请查看wiki pagethat site以获取有关Xml文件和DTD关联的更多选项和信息。

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

  

如何从文档中引用DTD

     

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

<!DOCTYPE spec SYSTEM "dtds/mydtd">
  

备注

     

系统字符串实际上是URI-Reference(在RFC中定义)   2396)所以你可以使用一个完整的URL字符串来表明你的位置   网上的DTD。如果你想要别人,这是一件非常好的事情   验证您的文档。也可以关联PUBLIC   标识符(魔术字符串),以便在目录中查找DTD   在客户端,无需在网络上找到它。一个DTD   包含一组元素和属性声明,但它们不包含   定义文档的根目录应该是什么。这是明确的   告诉解析器/验证器作为DOCTYPE的第一个元素   声明。

(摘录自here