В итоге, простые сайты (или точнее, хорошо структурированные) типа yandex.ru SgmlReader парсит на ура, но с более сложными — лезет на сайт http://www.w3.org/ и скачивает обновления, что ли?
У вас ведь есть код SqmlReader? Надо посмотреть как он лезет за этими файлами — и возможно придется самому прикручивать кэшеривания, если файлы не менялись.
поскольку doctype здесь html, то можно воспользоваться тем, что он пытается загрузить ресурс и вставить сюда свой кусочек кода, подменив имя ресурса, например.
if (_docType != null && _docType.ToLower() == "html") {
Assembly a = typeof(SgmlReader).Assembly;
string name = a.FullName.Split(',')[0]+".Html.dtd";
Stream stm = a.GetManifestResourceStream(name);
StreamReader sr = new StreamReader(stm);
_dtd = SgmlDtd.Parse(baseUri, "HTML", null, sr, null, _proxy, _nametable);
}
_H_>>Как это можно побороть?
Ovl>поскольку doctype здесь html, то можно воспользоваться тем, что он пытается загрузить ресурс и вставить сюда свой кусочек кода, подменив имя ресурса, например.
Здравствуйте, _Helg_, Вы писали: _H_>А как можно это все скачать и подложить куда-нибудь в папку солюшина? _H_>А то на каждый запрос к SgmlReaderу он лезет и скачивает эти файлы... _H_>Как это можно побороть?
Посмотри в сторону XmlResolver, вернее класа от него производного.
Нужно будет перегрузить методы ResolveUri и GetEntity. Не знаю как работает SgmlReader,
и можно ли туда прикрутить XmlResolver, но то что данный способ поможет не лезть каждый раз на сервер — это точно.
На RSDN где-то был пример кода.
Здравствуйте, _Helg_, Вы писали:
_H_>Здравствуйте, Ovl, Вы писали:
_H_>>>Как это можно побороть?
Ovl>>поскольку doctype здесь html, то можно воспользоваться тем, что он пытается загрузить ресурс и вставить сюда свой кусочек кода, подменив имя ресурса, например.
_H_>Хм, _H_>например, сделать stream на локальный файл?
например, да. вариантов много. файл или такой же embedded ресурс