Мы используем "Справку & Руководство" от EC Software и это работает вполне хорошо. Наши авторы распространены через США, таким образом, мы совместно используем наши файлы содержания через размещенный сервер SVN для управления управлением версиями. На каждой рабочей станции мы используем Черепаху SVN для пребывания в синхронизации. Продукт чрезвычайно прост в использовании и продуктивен.
Из моих поисков единственный способ заставить его работать - это не добавлять схему в XmlReader
. DTD, указанное в XML-документе, должно быть действующим URL-адресом, и XmlReader
будет загружать его каждый раз.
Если вам нужно, чтобы схема была локальной, вы можете изменить URL-адрес DTD таким образом, чтобы он указывал на локальный файл с помощью регулярного выражения, чтобы он выглядел примерно как
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN" "file:C:\wml.dtd">
Обратите внимание на файл : в URL. Сделайте это в памяти перед передачей в XmlReader, и тогда вам не придется изменять XML-файл только для того, чтобы убедиться в его правильности.
Попробуйте добавить схему DTD в коллекцию схем перед вызовом XmlReader.Create.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new ValidationEventHandler(validationError);
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, lblDTDPath.Text);
settings.Schemas = schemas;
XmlReader reader = XmlReader.Create(lblXmlPath.Text, settings);
while (reader.Read())
{
// empty by now
}
reader.Close();
У меня была аналогичная проблема. Для меня ответ заключался в том, что DTD не нужно подключать через схемы, поскольку XML-файл указывает на это, добавление через схемы вызвало у меня проблему.