2012-08-14 88 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"[]>