Я пытаюсь получить файл XHTML, загруженный в LINQ XElement. Тем не менее, у меня возникают проблемы с преобразователем. Проблема связана со следующим определением:Как загрузить XHTML-файл в XElement с помощью пользовательского XmlUrlResolver?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
У меня есть пользовательский XmlUrlResolver с перегруженной GetEntity, который преобразует ссылки, такие как http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd к потоку местных ресурсов. Это отлично работает практически для всего XHTML DTD. Единственный, с которым я не могу справиться, - это Uri «- // W3C // DTD XHTML 1.0 Transitional // EN», и я не уверен, что мне с ним делать.
public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
{
var resourceName = "ePub.DTD." + absoluteUri.Segments[absoluteUri.Segments.GetLength(0) - 1];
if (_resources.Contains(resourceName))
{
Stream dataStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
return dataStream;
}
return base.GetEntity(absoluteUri, role, ofObjectToReturn);
}
Как вы видите, в приведенном выше коде, все, что я не могу решить обрабатывается по умолчанию XmlUrlResolver
. Это означает, что вышеуказанная ссылка начинается с - // W3C /. Однако базовый метод, однако, генерирует DirectoryNotFoundException
. Продолжающийся будет загружать XElement
просто отлично. Если я верну пустой поток, он вызывает ошибку при загрузке XHTML в XElement
.
Любые подсказки, которые могут возникнуть у кого-то, связанные с таким определением PUBLIC с пользовательским XmlUrlResolver
?
В качестве альтернативы вы также можете разрешить публичный идентификатор системного идентификатора, который будет казаться, и он будет работать правильно, не генерируя никаких исключений во время загрузки или разрешения. – Jaapjan