我有一個處理HTTP請求的Web服務。它收到的文檔具有指定.dtd文件的嵌入式DOCTYPE。我希望使用更新的XML模式驗證文件,以便在新設備連接到我的服務時進行驗證。忽略DOCTYPE .dtd,但.dtd文件必須仍然存在
我可以成功忽略在.dtd文件中進行的驗證,但.dtd文件必須存在於本地硬盤上。我想刪除這些過時的文件,並沒有找到方法。
示例XML文檔,我的處理:
<?xml version="1.0" encoding="us-ascii" standalone="no"?>
<!DOCTYPE SomeMessage SYSTEM "SomeMessage.dtd">
<SomeMessage>data</SomeMessage>
,我使用打開的文檔的功能:
private void LoadXmlDoc(XmlTextReader myXmlTextReader)
{
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.Schemas.Add(null, MyGoodSchemaFile);
readerSettings.DtdProcessing = DtdProcessing.Ignore;
readerSettings.XmlResolver = null; // Added as a test.
readerSettings.ValidationEventHandler += ValidationEventHandle;
XmlReader myXmlReader = XmlReader.Create(myXmlTextReader, readerSettings);
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.XmlResolver = null; // Added as a test.
myXmlDocument.Load(myXmlReader); // Exception thrown here!
}
不同之處在於捕捉:
System.IO.FileNotFoundException: Could not find file 'c:\windows\system32\inetsrv\SomeMessage.dtd'. File name: 'c:\windows\system32\inetsrv\SomeMessage.dtd' at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
的SomeMessage.dtd文件的內容沒有被使用 - 它被忽略,因爲我的願望。但是,虛擬文件「c:\ windows \ system32 \ inetsrv \ SomeMessage.dtd」必須存在,否則將拋出異常。
我在Windows 7上運行,使用Visual Studio 2010和.NET 4.0
我怎麼能夠無視嵌入式.dtd,也並不需要虛擬.dtd文件被我的電腦上安裝?
什麼樣的Web服務的這是什麼?自家種植的還是ASP.NET Web服務(.asmx)?它是尋找DTD的Web服務客戶端嗎? – Kev 2010-10-08 21:21:00
它是一個.aspx服務,帶有.aspx.cs C#文件。不過,我認爲這不重要。我認爲任何由上面的代碼片段讀取的具有.dtd行的DOCTYPE的XML文檔都會有錯誤,無論您在哪裏執行它。 – 2010-10-08 22:13:24