我正在尝试通过.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文件,我真的找不到。
感谢您的时间。
答案 0 :(得分:2)
在Xml文件中声明与DTD的关联:
<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">
请查看wiki page和that site以获取有关Xml文件和DTD关联的更多选项和信息。
如何从文档中引用DTD :
假设文档的顶部元素是 spec 并且放置了dtd 在文件mydtd中的目录子目录dtds中 文档已加载:
<!DOCTYPE spec SYSTEM "dtds/mydtd">
备注强>:
系统字符串实际上是URI-Reference(在RFC中定义) 2396)所以你可以使用一个完整的URL字符串来表明你的位置 网上的DTD。如果你想要别人,这是一件非常好的事情 验证您的文档。也可以关联PUBLIC 标识符(魔术字符串),以便在目录中查找DTD 在客户端,无需在网络上找到它。一个DTD 包含一组元素和属性声明,但它们不包含 定义文档的根目录应该是什么。这是明确的 告诉解析器/验证器作为DOCTYPE的第一个元素 声明。
(摘录自here)