C# 通过dtd验证xml,dtd的不同目录
我试图通过.dtd验证xml文件。我写了这个验证器: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
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">