2012-08-14 89 views
1

我有以下DOCTYPE的XML文件:DTD验证

<!DOCTYPE localdtd PUBLIC "-//local host//local dtd - XML//EN" "localdtd.dtd"[]> 

我试图验证对localdtd.dtd的XML这是使用下面的代码驻留在我的根文件夹

XmlDocument xml = new XmlDocument(); 

using (var xmlreader = XmlReader.Create(
          new StringReader(xmlcontent), 
          new XmlReaderSettings() 
          { 
          ProhibitDtd = false, ValidationType = ValidationType.DTD 
          } )) 
{ 
      xml.Load(xmlreader); 
} 

我收到以下错误

找不到文件'C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ localdtd.dtd'。

我们可以指定localdtd.dtd文件的位置吗?

+0

,你在你的代码加载XML文件? – 2012-08-14 17:35:10

+0

我从像这样新的StringReader(xmlcontent)这样的字符串中加载它,其中xmlcontent具有内容表单数据库,并且它包含带有dtd声明的顶部的doctype。 – atif 2012-08-14 17:42:12

+0

此路径是正确的“C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ localdtd.dtd”???在这条路上你有一个XML?如果是的话,那么它的扩展名为.xml或dtd – 2012-08-14 17:45:38

回答

1

这里:

<!DOCTYPE localdtd PUBLIC "-//local host//local dtd - XML//EN" "localdtd.dtd"[]>

我相信你可以使用指定的直接路径:

<!DOCTYPE localdtd PUBLIC "-//local host//local dtd - XML//EN" @"C:\MYLOCATION\localdtd.dtd"[]>

或者尝试添加:

XmlResolver.ResolveUri(@ “C:\ MYLOCATION \ localdtd.dtd”,NULL)

要将​​。

+0

我在 – neontapir 2012-08-14 18:21:00

+2

之前使用了'XmlReaderSettings'方法。我的'DOCTYPE'通常采用'<!DOCTYPE SomeDTD SYSTEM“SomeDTD.dtd”>'格式。我承认我不熟悉OP正在使用的方法。我更喜欢调整设置并尽可能简单地保留“DOCTYPE”。 – Bob2Chiv 2012-08-14 18:28:27

+0

XmlResolver.ResolveUri dosen't似乎正在工作... – atif 2012-08-15 21:09:15

0

相对路径使用

<!DOCTYPE localdtd PUBLIC "-//local host//local dtd - XML//EN" "~/localdtd.dtd"[]>