Mam usługę WWW, która przetwarza żądanie HTTP. Dokument, który otrzymuje, zawiera osadzony DOCTYPE, który określa plik .dtd. Chciałbym skorzystać z nowszego pliku sprawdzania poprawności schematu XML, utworzonego na wypadek, gdyby nowsze urządzenia łączyły się z moją usługą.Ignoruj plik DOCTYPE .dtd, ale plik .dtd musi nadal istnieć
Mogę z powodzeniem zignorować sprawdzanie poprawności, które dzieje się w pliku .dtd, ale plik .dtd musi istnieć na moim lokalnym dysku twardym. Chcę usunąć te przestarzałe pliki i nie znalazłem sposobu.
dokument XML Próbka mam przetwarzania:
<?xml version="1.0" encoding="us-ascii" standalone="no"?>
<!DOCTYPE SomeMessage SYSTEM "SomeMessage.dtd">
<SomeMessage>data</SomeMessage>
funkcja, która używam, aby otworzyć dokument:
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!
}
tą różnicą, że jest złowionych:
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)
zawartość pliku SomeMessage.dtd nie jest używana - jest ignorowana, jak chcę. Jednak fikcyjny plik "c: \ windows \ system32 \ inetsrv \ SomeMessage.dtd" musi istnieć, w przeciwnym razie zostanie zgłoszony wyjątek.
Używam Windows 7, przy użyciu programu Visual Studio 2010 i .NET 4.0
Jak mogę ignorować osadzone .dtd a także nie wymagają obojętne plik .dtd być zainstalowany na moim komputerze?
Jakie usługi internetowej jest? Home grown lub usługa sieciowa ASP.NET (.asmx)? Czy jest to klient usługi WWW, który szuka DTD? – Kev
Jest to usługa .aspx, z plikiem .aspx.cs C#. Myślę jednak, że to nie ma znaczenia. Myślę, że każdy dokument XML odczytywany przez fragment kodu powyżej, który ma DOCTYPE z linią .dtd, będzie miał błąd bez względu na to, gdzie go uruchomisz. –